summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2016-03-08 12:09:55 +0000
committerAndras Timar <andras.timar@collabora.com>2016-03-10 19:42:03 +0100
commitb3822ee713d7f25b43f99553ada8a6f0a81e4d44 (patch)
treec3e521be40c16540571d0559c3d293e339969743 /lotuswordpro
parenta347c44364f06514adf60c954557a6103726bdfa (diff)
avoid infinite regress in busted documents
Change-Id: I639617e41cd9a9a51a3dd3efa32ac1cf2991b9d2 (cherry picked from commit f16ceae46dd8f3974a379c6fb07feaffb8012b25) Reviewed-on: https://gerrit.libreoffice.org/23031 Reviewed-by: Miklos Vajna <vmiklos@collabora.co.uk> Tested-by: Miklos Vajna <vmiklos@collabora.co.uk> (cherry picked from commit 69e4ce0716f7998dbeab954a43b912e72f0f4947)
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/qa/cppunit/data/fail/loop-2.lwpbin0 -> 79446 bytes
-rw-r--r--lotuswordpro/source/filter/lwpdivinfo.cxx8
-rw-r--r--lotuswordpro/source/filter/lwpfont.cxx2
-rw-r--r--lotuswordpro/source/filter/lwptablelayout.cxx4
-rw-r--r--lotuswordpro/source/filter/lwptblformula.cxx2
-rw-r--r--lotuswordpro/source/filter/xfilter/xfcontent.hxx21
-rw-r--r--lotuswordpro/source/filter/xfilter/xfcontentcontainer.cxx2
-rw-r--r--lotuswordpro/source/filter/xfilter/xftextspan.cxx6
8 files changed, 28 insertions, 17 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/lwpdivinfo.cxx b/lotuswordpro/source/filter/lwpdivinfo.cxx
index 11d4f0e559d4..80884f7cc956 100644
--- a/lotuswordpro/source/filter/lwpdivinfo.cxx
+++ b/lotuswordpro/source/filter/lwpdivinfo.cxx
@@ -112,15 +112,11 @@ void LwpDivInfo::Read()
m_FillerPageTextID.ReadIndexed(m_pObjStrm);
// read external file object stuff
-#if !defined(NDEBUG)
- sal_uInt16 type =
-#endif
- m_pObjStrm->QuickReaduInt16();
+ sal_uInt16 type = m_pObjStrm->QuickReaduInt16();
//cpExternalFile = LNULL;
- assert(type==0);
+ SAL_WARN_IF(type != 0, "lwp", "should be 0");
m_pObjStrm->SkipExtra();
-
}
void LwpDivInfo::SkipFront()
diff --git a/lotuswordpro/source/filter/lwpfont.cxx b/lotuswordpro/source/filter/lwpfont.cxx
index 4307d298e14b..79e94bfbece7 100644
--- a/lotuswordpro/source/filter/lwpfont.cxx
+++ b/lotuswordpro/source/filter/lwpfont.cxx
@@ -262,7 +262,7 @@ void LwpFontTable::Read(LwpObjectStream *pStrm)
OUString LwpFontTable::GetFaceName(sal_uInt16 index) //index: start from 1
{
- assert(index <= m_nCount && index > 0);
+ SAL_WARN_IF(index > m_nCount || index <= 0, "lwp", "bad font index");
return (index <= m_nCount && index > 0) ? m_pFontEntries[index-1].GetFaceName() : OUString();
}
diff --git a/lotuswordpro/source/filter/lwptablelayout.cxx b/lotuswordpro/source/filter/lwptablelayout.cxx
index 6f1b73cf493d..ec1854289c0a 100644
--- a/lotuswordpro/source/filter/lwptablelayout.cxx
+++ b/lotuswordpro/source/filter/lwptablelayout.cxx
@@ -218,13 +218,13 @@ double LwpSuperTableLayout::GetTableWidth()
LwpTableLayout* pTableLayout = GetTableLayout();
if(!pTableLayout)
{
- assert(false);
+ SAL_WARN("lwp", "missing table layout, early return");
return 0;
}
LwpTable *pTable = pTableLayout->GetTable();
if(!pTable)
{
- assert(false);
+ SAL_WARN("lwp", "missing table, early return");
return 0;
}
double dDefaultWidth = pTable->GetWidth();
diff --git a/lotuswordpro/source/filter/lwptblformula.cxx b/lotuswordpro/source/filter/lwptblformula.cxx
index 7f8ea4a13e68..699b7ce44e78 100644
--- a/lotuswordpro/source/filter/lwptblformula.cxx
+++ b/lotuswordpro/source/filter/lwptblformula.cxx
@@ -389,7 +389,7 @@ void LwpFormulaInfo::Read()
}
else
{
- assert(false);
+ SAL_WARN("lwp", "missing row list");
}
}
// sal_uInt8 cFlags = (sal_uInt8) m_pObjStrm->QuickReaduInt16(); // written as a sal_uInt16
diff --git a/lotuswordpro/source/filter/xfilter/xfcontent.hxx b/lotuswordpro/source/filter/xfilter/xfcontent.hxx
index 2d1dfa7e7b15..29a2fd070e6e 100644
--- a/lotuswordpro/source/filter/xfilter/xfcontent.hxx
+++ b/lotuswordpro/source/filter/xfilter/xfcontent.hxx
@@ -64,6 +64,7 @@
#include <rtl/ustring.hxx>
#include <salhelper/simplereferenceobject.hxx>
+#include <stdexcept>
#include "xfdefs.hxx"
@@ -92,14 +93,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 ece407e9f6a2..4e3576d87bd8 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" );
}