sw/qa/extras/ooxmlimport/data/tdf129659.docx |binary sw/qa/extras/ooxmlimport/ooxmlimport2.cxx | 5 +++++ writerfilter/source/dmapper/DomainMapper.cxx | 15 +++++++-------- 3 files changed, 12 insertions(+), 8 deletions(-)
New commits: commit b87af9775167002d36a3bc16cb308ea7895d7ea0 Author: Jan-Marek Glogowski <jan-marek.glogow...@extern.cib.de> AuthorDate: Mon Jan 20 22:49:31 2020 +0100 Commit: Jan-Marek Glogowski <glo...@fbihome.de> CommitDate: Thu Jan 30 15:35:03 2020 +0100 tdf#129659 DOCX check global footnote context Since tdf#121441 we parse custom footnotes to get at least the DOCX footnote text, even if we can't represent the formating. This might push additional contexts to the parser stack. Therefore it's now not sufficient to check the current context for a footnote, but one has to check the global parser for a footnote context. The actual bug is the unsupported footnote page break, which was not correctly ignored and added a paragraph context to the stack, resulting in the async substream input and output stack size. Change-Id: I143254e7df37a619cb4efb542b58d3eff3afffa7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87114 Tested-by: Jenkins Reviewed-by: Jan-Marek Glogowski <glo...@fbihome.de> diff --git a/sw/qa/extras/ooxmlimport/data/tdf129659.docx b/sw/qa/extras/ooxmlimport/data/tdf129659.docx new file mode 100644 index 000000000000..38bd040d59bd Binary files /dev/null and b/sw/qa/extras/ooxmlimport/data/tdf129659.docx differ diff --git a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx index 593947fd77ab..7ba2aae3d74a 100644 --- a/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx +++ b/sw/qa/extras/ooxmlimport/ooxmlimport2.cxx @@ -536,6 +536,11 @@ DECLARE_OOXMLIMPORT_TEST(testTdf130214, "tdf130214.docx") // Currently this file imports with errors because of tdf#126435; it must not segfault on load } +DECLARE_OOXMLIMPORT_TEST(testTdf129659, "tdf129659.docx") +{ + // don't crash on footnote with page break +} + // tests should only be added to ooxmlIMPORT *if* they fail round-tripping in ooxmlEXPORT CPPUNIT_PLUGIN_IMPLEMENT(); diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx index 0da610f7ab53..d7545309ea99 100644 --- a/writerfilter/source/dmapper/DomainMapper.cxx +++ b/writerfilter/source/dmapper/DomainMapper.cxx @@ -3168,8 +3168,7 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) } } - PropertyMapPtr pContext = m_pImpl->GetTopContext(); - if (pContext && !pContext->GetFootnote().is()) + if (!m_pImpl->GetFootnoteContext()) { if (m_pImpl->isBreakDeferred(PAGE_BREAK)) m_pImpl->GetTopContext()->Insert(PROP_BREAK_TYPE, uno::makeAny(style::BreakType_PAGE_BEFORE)); @@ -3178,7 +3177,8 @@ void DomainMapper::lcl_text(const sal_uInt8 * data_, size_t len) m_pImpl->clearDeferredBreaks(); } - if( pContext->GetFootnote().is() && m_pImpl->IsInCustomFootnote() ) + PropertyMapPtr pContext = m_pImpl->GetTopContext(); + if (pContext && pContext->GetFootnote().is() && m_pImpl->IsInCustomFootnote()) { pContext->GetFootnote()->setLabel(sText); //otherwise ignore sText @@ -3404,7 +3404,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) const bool bSingleParagraph = m_pImpl->GetIsFirstParagraphInSection() && m_pImpl->GetIsLastParagraphInSection(); const bool bSingleParagraphAfterRedline = m_pImpl->GetIsFirstParagraphInSection(true) && m_pImpl->GetIsLastParagraphInSection(); PropertyMapPtr pContext = m_pImpl->GetTopContextOfType(CONTEXT_PARAGRAPH); - if (pContext && !pContext->GetFootnote().is()) + if (!m_pImpl->GetFootnoteContext()) { if (m_pImpl->isBreakDeferred(PAGE_BREAK)) { @@ -3464,9 +3464,7 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) } else { - - PropertyMapPtr pContext = m_pImpl->GetTopContext(); - if ( pContext && !pContext->GetFootnote().is() ) + if (!m_pImpl->GetFootnoteContext()) { if (m_pImpl->isBreakDeferred(PAGE_BREAK)) { @@ -3495,7 +3493,8 @@ void DomainMapper::lcl_utext(const sal_uInt8 * data_, size_t len) m_pImpl->clearDeferredBreaks(); } - if( pContext && pContext->GetFootnote().is() ) + PropertyMapPtr pContext = m_pImpl->GetTopContext(); + if (pContext && pContext->GetFootnote().is() && m_pImpl->IsInCustomFootnote()) { pContext->GetFootnote()->setLabel( sText ); //otherwise ignore sText _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits