diff options
-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(); |