summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorJan-Marek Glogowski <jan-marek.glogowski@extern.cib.de>2020-01-20 22:49:31 +0100
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2020-01-30 16:55:34 +0100
commita0db764766dffe868ba3075901326ed6410ea037 (patch)
treeb0844a87ad8462de7edbff54d4e94a9e40ef169b /writerfilter
parent0dba4ed331f539285d8ede0503760b5385bdca8e (diff)
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 <glogow@fbihome.de> (cherry picked from commit b87af9775167002d36a3bc16cb308ea7895d7ea0) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/87742 Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Diffstat (limited to 'writerfilter')
-rw-r--r--writerfilter/source/dmapper/DomainMapper.cxx15
1 files changed, 7 insertions, 8 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper.cxx b/writerfilter/source/dmapper/DomainMapper.cxx
index f7f24546def8..4ea227cd8e0e 100644
--- a/writerfilter/source/dmapper/DomainMapper.cxx
+++ b/writerfilter/source/dmapper/DomainMapper.cxx
@@ -3174,8 +3174,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));
@@ -3184,7 +3183,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
@@ -3410,7 +3410,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))
{
@@ -3470,9 +3470,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))
{
@@ -3501,7 +3499,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