summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-03-08 12:09:55 +0000
committerCaolán McNamara <caolanm@redhat.com>2016-03-08 12:10:18 +0000
commitf16ceae46dd8f3974a379c6fb07feaffb8012b25 (patch)
treea62426965058aa35318add67468c291c6b2f358b /lotuswordpro
parent08306201bc88b2efe915e27799b44aaf00a3db7e (diff)
avoid infinite regress in busted documents
Change-Id: I639617e41cd9a9a51a3dd3efa32ac1cf2991b9d2
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/qa/cppunit/data/fail/loop-2.lwpbin0 -> 79446 bytes
-rw-r--r--lotuswordpro/source/filter/xfilter/xfcontent.hxx20
-rw-r--r--lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx2
-rw-r--r--lotuswordpro/source/filter/xfilter/xftextspan.cxx6
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
new file mode 100644
index 000000000000..6342cc56ef4c
--- /dev/null
+++ b/lotuswordpro/qa/cppunit/data/fail/loop-2.lwp
Binary files differ
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" );
}