diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-12-13 17:59:02 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-12-13 17:59:02 +0000 |
commit | 76220aafe0bffe20f10b07c725cd096adb56b108 (patch) | |
tree | 238d1ebe000f38e71b88921e5764cc3e978426cb /lotuswordpro | |
parent | 012bdecfcd7094403516c98bd5231fe1ef6f7e9d (diff) |
guard against infinite recursion
Change-Id: I1b566c835b6cdc733d0aa4393d3b3ce2ff7b764f
Diffstat (limited to 'lotuswordpro')
-rw-r--r-- | lotuswordpro/source/filter/lwpdoc.cxx | 5 | ||||
-rw-r--r-- | lotuswordpro/source/filter/lwpdoc.hxx | 12 |
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(); |