diff options
-rw-r--r-- | lotuswordpro/qa/cppunit/data/fail/loop-2.lwp | bin | 0 -> 79446 bytes | |||
-rw-r--r-- | lotuswordpro/source/filter/xfilter/xfcontent.hxx | 20 | ||||
-rw-r--r-- | lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx | 2 | ||||
-rw-r--r-- | lotuswordpro/source/filter/xfilter/xftextspan.cxx | 6 |
4 files changed, 21 insertions, 7 deletions
diff --git a/lotuswordpro/qa/cppunit/data/fail/loop-2.lwp b/lotuswordpro/qa/cppunit/data/fail/loop-2.lwp Binary files differnew file mode 100644 index 000000000000..6342cc56ef4c --- /dev/null +++ b/lotuswordpro/qa/cppunit/data/fail/loop-2.lwp diff --git a/lotuswordpro/source/filter/xfilter/xfcontent.hxx b/lotuswordpro/source/filter/xfilter/xfcontent.hxx index 2d1dfa7e7b15..853790548fee 100644 --- a/lotuswordpro/source/filter/xfilter/xfcontent.hxx +++ b/lotuswordpro/source/filter/xfilter/xfcontent.hxx @@ -92,14 +92,28 @@ public: */ OUString GetStyleName() {return m_strStyleName;} - virtual void ToXml(IXFStream * stream) = 0; + void DoToXml(IXFStream* stream) + { + if (m_bDoingToXml) + throw std::runtime_error("recursion in content"); + m_bDoingToXml = true; + ToXml(stream); + m_bDoingToXml = false; + } protected: - XFContent() {} + XFContent() + : m_bDoingToXml(false) + { + } + + virtual void ToXml(IXFStream* stream) = 0; virtual ~XFContent() {} - OUString m_strStyleName; + OUString m_strStyleName; +private: + bool m_bDoingToXml; }; #endif diff --git a/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx index 05a24f948f33..7608da24307f 100644 --- a/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx +++ b/lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx @@ -131,7 +131,7 @@ void XFContentContainer::ToXml(IXFStream *pStrm) { XFContent *pContent = it->get(); if( pContent ) - pContent->ToXml(pStrm); + pContent->DoToXml(pStrm); } } diff --git a/lotuswordpro/source/filter/xfilter/xftextspan.cxx b/lotuswordpro/source/filter/xfilter/xftextspan.cxx index 4de6bad98df7..90f6e32aa569 100644 --- a/lotuswordpro/source/filter/xfilter/xftextspan.cxx +++ b/lotuswordpro/source/filter/xfilter/xftextspan.cxx @@ -112,7 +112,7 @@ void XFTextSpan::ToXml(IXFStream *pStrm) { XFContent *pContent = it->get(); if( pContent ) - pContent->ToXml(pStrm); + pContent->DoToXml(pStrm); } pStrm->EndElement( "text:span" ); @@ -135,7 +135,7 @@ void XFTextSpanStart::ToXml(IXFStream *pStrm) { XFContent *pContent = it->get(); if( pContent ) - pContent->ToXml(pStrm); + pContent->DoToXml(pStrm); } } void XFTextSpanEnd::ToXml(IXFStream *pStrm) @@ -145,7 +145,7 @@ void XFTextSpanEnd::ToXml(IXFStream *pStrm) { XFContent *pContent = it->get(); if( pContent ) - pContent->ToXml(pStrm); + pContent->DoToXml(pStrm); } pStrm->EndElement( "text:span" ); } |