filter/source/msfilter/dffrecordheader.cxx |   35 +++++++++++------------------
 sd/source/filter/ppt/pptatom.cxx           |    6 +---
 2 files changed, 16 insertions(+), 25 deletions(-)

New commits:
commit d5288dd29611f2e5c4140724255cea8e7bb2b25b
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Tue Jan 4 21:27:40 2022 +0000
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Thu Jan 6 18:14:30 2022 +0100

    ofz#42785 Timeout
    
    Stream::Seek (like istream::seekg) clears any eofbit
    Change-Id: I90253e69a52c4099aa2971294a215dff37e8a246
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127975
    Tested-by: Caolán McNamara <caol...@redhat.com>
    Reviewed-by: Caolán McNamara <caol...@redhat.com>

diff --git a/filter/source/msfilter/dffrecordheader.cxx 
b/filter/source/msfilter/dffrecordheader.cxx
index 2a8c91a89b1b..c94bec53b611 100644
--- a/filter/source/msfilter/dffrecordheader.cxx
+++ b/filter/source/msfilter/dffrecordheader.cxx
@@ -22,28 +22,21 @@
 bool ReadDffRecordHeader(SvStream& rIn, DffRecordHeader& rRec)
 {
     rRec.nFilePos = rIn.Tell();
-    if (rIn.remainingSize() >= 8)
-    {
-        sal_uInt16 nTmp(0);
-        rIn.ReadUInt16(nTmp);
-        rRec.nImpVerInst = nTmp;
-        rRec.nRecVer = sal::static_int_cast<sal_uInt8>(nTmp & 0x000F);
-        rRec.nRecInstance = nTmp >> 4;
-        rIn.ReadUInt16(rRec.nRecType);
-        rIn.ReadUInt32(rRec.nRecLen);
+    sal_uInt16 nTmp(0);
+    rIn.ReadUInt16(nTmp);
+    rRec.nImpVerInst = nTmp;
+    rRec.nRecVer = sal::static_int_cast<sal_uInt8>(nTmp & 0x000F);
+    rRec.nRecInstance = nTmp >> 4;
+    rRec.nRecType = 0;
+    rIn.ReadUInt16(rRec.nRecType);
+    rRec.nRecLen = 0;
+    rIn.ReadUInt32(rRec.nRecLen);
+
+    // preserving overflow, optimally we would check
+    // the record size against the parent header
+    if (rRec.nRecLen > (SAL_MAX_UINT32 - rRec.nFilePos))
+        rIn.SetError(SVSTREAM_FILEFORMAT_ERROR);
 
-        // preserving overflow, optimally we would check
-        // the record size against the parent header
-        if (rRec.nRecLen > (SAL_MAX_UINT32 - rRec.nFilePos))
-            rIn.SetError(SVSTREAM_FILEFORMAT_ERROR);
-    }
-    else
-    {
-        rRec.nImpVerInst = 0;
-        rRec.nRecVer = 0;
-        rRec.nRecInstance = 0;
-        rIn.Seek(STREAM_SEEK_TO_END);
-    }
     return rIn.good();
 }
 
diff --git a/sd/source/filter/ppt/pptatom.cxx b/sd/source/filter/ppt/pptatom.cxx
index 90e61e738ffb..20d52eb8c63f 100644
--- a/sd/source/filter/ppt/pptatom.cxx
+++ b/sd/source/filter/ppt/pptatom.cxx
@@ -39,13 +39,11 @@ Atom::Atom( const DffRecordHeader& rRecordHeader, SvStream& 
rStream )
             // retrieve file size (to allow sanity checks)
             sal_uInt64 const nStreamSize = mrStream.TellEnd();
 
-            while( (mrStream.GetError() == ERRCODE_NONE )
+            while( mrStream.good()
                 && ( mrStream.Tell() < nStreamSize )
                 && ( mrStream.Tell() < maRecordHeader.GetRecEndFilePos() ) )
             {
-                ReadDffRecordHeader( mrStream, aChildHeader );
-
-                if( mrStream.GetError() == ERRCODE_NONE )
+                if (ReadDffRecordHeader(mrStream, aChildHeader))
                 {
                     Atom* pAtom = new Atom( aChildHeader, mrStream );
 

Reply via email to