summaryrefslogtreecommitdiff
path: root/writerfilter
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.co.uk>2014-01-23 17:04:38 +0100
committerAndras Timar <andras.timar@collabora.com>2014-07-04 11:33:50 +0200
commit14ca886136e4ce481dc32ed019b23a367c682c3e (patch)
tree9f85bc3490f7f1729ceceef373c327ed3484b695 /writerfilter
parentf5c1929cdfe1731c609338028df37e13d9a1ae80 (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.cxx8
-rw-r--r--writerfilter/source/dmapper/DomainMapper_Impl.hxx2
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;