You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openoffice.apache.org by ar...@apache.org on 2023/01/20 12:34:38 UTC
[openoffice] 03/03: Detect some endless loops
This is an automated email from the ASF dual-hosted git repository.
ardovm pushed a commit to branch AOO42X
in repository https://gitbox.apache.org/repos/asf/openoffice.git
commit 8b614d91703050326bd8d2a4cb8a4d35842023b7
Author: Arrigo Marchiori <ar...@yahoo.it>
AuthorDate: Fri Dec 9 18:24:25 2022 +0100
Detect some endless loops
(cherry picked from commit 272eca8e075d834a9a9235a4c9e52e17c2276f2f)
---
main/filter/source/msfilter/msdffimp.cxx | 6 ++++++
main/filter/source/msfilter/svdfppt.cxx | 12 ++++++++++++
2 files changed, 18 insertions(+)
diff --git a/main/filter/source/msfilter/msdffimp.cxx b/main/filter/source/msfilter/msdffimp.cxx
index 4ae3526a04..398b0fcdde 100644
--- a/main/filter/source/msfilter/msdffimp.cxx
+++ b/main/filter/source/msfilter/msdffimp.cxx
@@ -3025,12 +3025,18 @@ void DffRecordManager::Consume( SvStream& rIn, sal_Bool bAppend, sal_uInt32 nStO
pCList = (DffRecordList*)this;
while ( pCList->pNext )
pCList = pCList->pNext;
+ sal_Size nLastPosition;
while ( ( rIn.GetError() == 0 ) && ( ( rIn.Tell() + 8 ) <= nStOfs ) )
{
+ nLastPosition = rIn.Tell();
if ( pCList->nCount == DFF_RECORD_MANAGER_BUF_SIZE )
pCList = new DffRecordList( pCList );
rIn >> pCList->mHd[ pCList->nCount ];
pCList->mHd[ pCList->nCount++ ].SeekToEndOfRecord( rIn );
+ if (rIn.Tell() == nLastPosition) {
+ // We are inside an endless loop
+ break;
+ }
}
rIn.Seek( nOldPos );
}
diff --git a/main/filter/source/msfilter/svdfppt.cxx b/main/filter/source/msfilter/svdfppt.cxx
index b0571fabb1..86fbab9a12 100644
--- a/main/filter/source/msfilter/svdfppt.cxx
+++ b/main/filter/source/msfilter/svdfppt.cxx
@@ -2954,8 +2954,10 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry*
rSlidePersist.pHeaderFooterEntry = new HeaderFooterEntry( pMasterPersist );
ProcessData aProcessData( rSlidePersist, (SdPage*)pRet );
+ sal_Size nLastPosition;
while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aPageHd.GetRecEndFilePos() ) )
{
+ nLastPosition = rStCtrl.Tell();
DffRecordHeader aHd;
rStCtrl >> aHd;
switch ( aHd.nRecType )
@@ -3062,9 +3064,11 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry*
DffRecordHeader aShapeHd;
if ( SeekToRec( rStCtrl, DFF_msofbtSpContainer, aEscherObjListHd.GetRecEndFilePos(), &aShapeHd ) )
{
+ sal_Size nShapeLastPosition;
aShapeHd.SeekToEndOfRecord( rStCtrl );
while ( ( rStCtrl.GetError() == 0 ) && ( rStCtrl.Tell() < aEscherObjListHd.GetRecEndFilePos() ) )
{
+ nShapeLastPosition = rStCtrl.Tell();
rStCtrl >> aShapeHd;
if ( ( aShapeHd.nRecType == DFF_msofbtSpContainer ) || ( aShapeHd.nRecType == DFF_msofbtSpgrContainer ) )
{
@@ -3085,6 +3089,10 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry*
}
}
aShapeHd.SeekToEndOfRecord( rStCtrl );
+ if (rStCtrl.Tell() == nShapeLastPosition) {
+ // We are inside an endless loop
+ break;
+ }
}
}
}
@@ -3137,6 +3145,10 @@ void SdrPowerPointImport::ImportPage( SdrPage* pRet, const PptSlidePersistEntry*
break;
}
aHd.SeekToEndOfRecord( rStCtrl );
+ if (rStCtrl.Tell() == nLastPosition) {
+ // We are inside an endless loop
+ break;
+ }
}
if ( rSlidePersist.pSolverContainer )
SolveSolver( *rSlidePersist.pSolverContainer );