summaryrefslogtreecommitdiff
path: root/lotuswordpro
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-12-13 17:59:02 +0000
committerCaolán McNamara <caolanm@redhat.com>2015-12-13 17:59:02 +0000
commit76220aafe0bffe20f10b07c725cd096adb56b108 (patch)
tree238d1ebe000f38e71b88921e5764cc3e978426cb /lotuswordpro
parent012bdecfcd7094403516c98bd5231fe1ef6f7e9d (diff)
guard against infinite recursion
Change-Id: I1b566c835b6cdc733d0aa4393d3b3ce2ff7b764f
Diffstat (limited to 'lotuswordpro')
-rw-r--r--lotuswordpro/source/filter/lwpdoc.cxx5
-rw-r--r--lotuswordpro/source/filter/lwpdoc.hxx12
2 files changed, 14 insertions, 3 deletions
diff --git a/lotuswordpro/source/filter/lwpdoc.cxx b/lotuswordpro/source/filter/lwpdoc.cxx
index d120d9c9f3c7..9cc5f686bfa9 100644
--- a/lotuswordpro/source/filter/lwpdoc.cxx
+++ b/lotuswordpro/source/filter/lwpdoc.cxx
@@ -71,6 +71,7 @@
LwpDocument::LwpDocument(LwpObjectHeader& objHdr, LwpSvStream* pStrm)
: LwpDLNFPVList(objHdr, pStrm)
, m_pOwnedFoundry(nullptr)
+ , m_bGettingFirstDivisionWithContentsThatIsNotOLE(false)
, m_nFlags(0)
, m_nPersistentFlags(0)
, m_pLnOpts(nullptr)
@@ -619,7 +620,7 @@ LwpDocument* LwpDocument::GetPreviousDivision()
/**
* @descr Get first division with contents that is not ole, copy from lwp-source code
*/
- LwpDocument* LwpDocument::GetFirstDivisionWithContentsThatIsNotOLE()
+ LwpDocument* LwpDocument::ImplGetFirstDivisionWithContentsThatIsNotOLE()
{
LwpDivInfo* pDivInfo = dynamic_cast<LwpDivInfo*>(GetDivInfoID().obj().get());
if(pDivInfo && pDivInfo->HasContents()
@@ -628,7 +629,7 @@ LwpDocument* LwpDocument::GetPreviousDivision()
LwpDocument* pDivision = GetFirstDivision();
- while (pDivision && pDivision != this)
+ while (pDivision)
{
LwpDocument* pContentDivision = pDivision->GetFirstDivisionWithContentsThatIsNotOLE();
if(pContentDivision)
diff --git a/lotuswordpro/source/filter/lwpdoc.hxx b/lotuswordpro/source/filter/lwpdoc.hxx
index 8b1bdef3ef2d..5fa33f4108b1 100644
--- a/lotuswordpro/source/filter/lwpdoc.hxx
+++ b/lotuswordpro/source/filter/lwpdoc.hxx
@@ -84,6 +84,7 @@ public:
private:
LwpFoundry* m_pOwnedFoundry;
+ bool m_bGettingFirstDivisionWithContentsThatIsNotOLE;
//Data members in file format
LwpObjectID m_DocSockID;
@@ -154,7 +155,15 @@ public:
LwpDocument* GetLastDivisionWithContents();
LwpDocument* GetLastInGroupWithContents();
LwpDocument* GetRootDocument();
- LwpDocument* GetFirstDivisionWithContentsThatIsNotOLE();
+ LwpDocument* GetFirstDivisionWithContentsThatIsNotOLE()
+ {
+ if (m_bGettingFirstDivisionWithContentsThatIsNotOLE)
+ throw std::runtime_error("recursion in page divisions");
+ m_bGettingFirstDivisionWithContentsThatIsNotOLE = true;
+ LwpDocument* pRet = ImplGetFirstDivisionWithContentsThatIsNotOLE();
+ m_bGettingFirstDivisionWithContentsThatIsNotOLE = false;
+ return pRet;
+ }
LwpDocument* GetLastDivisionThatHasEndnote();
LwpDocument* GetLastDivision();
@@ -167,6 +176,7 @@ public:
private:
void MaxNumberOfPages(sal_uInt16& nNumPages);
+ LwpDocument* ImplGetFirstDivisionWithContentsThatIsNotOLE();
void XFConvertFrameInPage(XFContentContainer* pCont);
static void ChangeStyleName();
bool IsSkippedDivision();