diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-01-23 17:04:38 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2014-07-04 11:33:50 +0200 |
commit | 14ca886136e4ce481dc32ed019b23a367c682c3e (patch) | |
tree | 9f85bc3490f7f1729ceceef373c327ed3484b695 /writerfilter | |
parent | f5c1929cdfe1731c609338028df37e13d9a1ae80 (diff) |
fdo#69649 RTF import: don't crash on empty TOC result
Regression from commit 9679e9c23216decb5f9f25f85b04cb3f25211111
(fdo#69649 Fix for pre-rendered Table Of Contents, 2013-12-30), the
situation that the field doesn't have a result wasn't handled, resulting
in a m_aTextAppendStack.pop() call in dmapper, without a matching
.push() one.
Change-Id: I456d9096d01fb27832a40f6b72802ec555d62647
(cherry picked from commit 018bbe6c538d99c2f14fd4c761048848dc458f4a)
Signed-off-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'writerfilter')
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.cxx | 8 | ||||
-rw-r--r-- | writerfilter/source/dmapper/DomainMapper_Impl.hxx | 2 |
2 files changed, 9 insertions, 1 deletions
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx index a92b1207110c..f59882ae35fe 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx @@ -154,6 +154,7 @@ DomainMapper_Impl::DomainMapper_Impl( m_bIsColumnBreakDeferred( false ), m_bIsPageBreakDeferred( false ), m_bStartTOC(false), + m_bStartedTOC(false), m_bTOCPageRef(false), m_nSymboldata(-1), m_pLastSectionContext( ), @@ -1248,6 +1249,7 @@ void DomainMapper_Impl::appendTextPortion( const OUString& rString, PropertyMapP { if (m_bStartTOC) { + m_bStartedTOC = true; uno::Reference< text::XTextCursor > xTOCTextCursor; xTOCTextCursor = xTextAppend->getEnd()->getText( )->createTextCursor( ); xTOCTextCursor->gotoEnd(false); @@ -3757,7 +3759,11 @@ void DomainMapper_Impl::PopFieldContext() if( xToInsert.is() ) { m_bStartTOC = false; - m_aTextAppendStack.pop(); + if (m_bStartedTOC) + { + m_aTextAppendStack.pop(); + m_bStartedTOC = false; + } if(xTOCMarkerCursor.is()) { xTOCMarkerCursor->goLeft(1,sal_True); diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.hxx b/writerfilter/source/dmapper/DomainMapper_Impl.hxx index b7d01d9f3c3c..6fe81d48baea 100644 --- a/writerfilter/source/dmapper/DomainMapper_Impl.hxx +++ b/writerfilter/source/dmapper/DomainMapper_Impl.hxx @@ -332,6 +332,8 @@ private: bool m_bIsColumnBreakDeferred; bool m_bIsPageBreakDeferred; bool m_bStartTOC; + /// If we got any text that is the pre-rendered result of the TOC field. + bool m_bStartedTOC; bool m_bTOCPageRef; LineNumberSettings m_aLineNumberSettings; |