diff options
Diffstat (limited to 'lotuswordpro/source/filter/lwpdoc.cxx')
-rw-r--r-- | lotuswordpro/source/filter/lwpdoc.cxx | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lotuswordpro/source/filter/lwpdoc.cxx b/lotuswordpro/source/filter/lwpdoc.cxx index 27db9a01978d..7a0165191daf 100644 --- a/lotuswordpro/source/filter/lwpdoc.cxx +++ b/lotuswordpro/source/filter/lwpdoc.cxx @@ -74,6 +74,7 @@ LwpDocument::LwpDocument(LwpObjectHeader const & objHdr, LwpSvStream* pStrm) : LwpDLNFPVList(objHdr, pStrm) , m_pOwnedFoundry(nullptr) , m_bGettingFirstDivisionWithContentsThatIsNotOLE(false) + , m_bGettingPreviousDivisionWithContents(false) , m_nFlags(0) , m_nPersistentFlags(0) , m_pLnOpts(nullptr) @@ -526,17 +527,20 @@ LwpDocument* LwpDocument::GetPreviousDivision() /** * @descr Get previous division which has contents, copy from lwp source code */ - LwpDocument* LwpDocument::GetPreviousDivisionWithContents() +LwpDocument* LwpDocument::GetPreviousDivisionWithContents() { - if(GetPreviousDivision()) - { - LwpDocument* pDoc = GetPreviousDivision()->GetLastDivisionWithContents(); - if (pDoc) - return pDoc; - } - if(GetParentDivision()) - return GetParentDivision()->GetPreviousDivisionWithContents(); - return nullptr; + if (m_bGettingPreviousDivisionWithContents) + throw std::runtime_error("recursion in page divisions"); + m_bGettingPreviousDivisionWithContents = true; + LwpDocument* pRet = nullptr; + + if (GetPreviousDivision()) + pRet = GetPreviousDivision()->GetLastDivisionWithContents(); + if (!pRet && GetParentDivision()) + pRet = GetParentDivision()->GetPreviousDivisionWithContents(); + + m_bGettingPreviousDivisionWithContents = false; + return pRet; } /** * @descr Get last division which has contents, copy from lwp source code |