sd/qa/unit/data/ppt/pass/hang-4.ppt |binary sd/source/filter/ppt/propread.cxx | 25 +++++++++++++++---------- 2 files changed, 15 insertions(+), 10 deletions(-)
New commits: commit ca9cbc1aa3458de7ce4893668476aa4433e6b0e0 Author: Caolán McNamara <caol...@redhat.com> Date: Thu Aug 27 13:00:36 2015 +0100 check for stream status after a read, not after a seek Change-Id: I984e99c1a1484547aa4d60bf301167f3cbc9f716 (cherry picked from commit eea399ddd52a0de368321963bb828bc15632dd0b) Reviewed-on: https://gerrit.libreoffice.org/18075 Reviewed-by: Michael Meeks <michael.me...@collabora.com> Tested-by: Michael Meeks <michael.me...@collabora.com> diff --git a/sd/qa/unit/data/ppt/pass/hang-4.ppt b/sd/qa/unit/data/ppt/pass/hang-4.ppt new file mode 100644 index 0000000..f5aa247 Binary files /dev/null and b/sd/qa/unit/data/ppt/pass/hang-4.ppt differ diff --git a/sd/source/filter/ppt/propread.cxx b/sd/source/filter/ppt/propread.cxx index 1e71044..8f376fd 100644 --- a/sd/source/filter/ppt/propread.cxx +++ b/sd/source/filter/ppt/propread.cxx @@ -319,7 +319,7 @@ bool Section::GetDictionary( Dictionary& rDict ) void Section::Read( SvStorageStream *pStrm ) { - sal_uInt32 i, nSecOfs, nPropType, nPropSize, nCurrent, nVectorCount, nTemp, nStrmSize; + sal_uInt32 i, nSecOfs, nPropSize, nStrmSize; nSecOfs = pStrm->Tell(); pStrm->Seek( STREAM_SEEK_TO_END ); @@ -329,16 +329,20 @@ void Section::Read( SvStorageStream *pStrm ) mnTextEnc = RTL_TEXTENCODING_MS_1252; sal_uInt32 nSecSize(0), nPropCount(0); pStrm->ReadUInt32( nSecSize ).ReadUInt32( nPropCount ); - while (nPropCount-- && pStrm->good()) + while (nPropCount--) { sal_uInt32 nPropId(0), nPropOfs(0); - pStrm->ReadUInt32( nPropId ).ReadUInt32( nPropOfs ); - nCurrent = pStrm->Tell(); - pStrm->Seek( nPropOfs + nSecOfs ); + pStrm->ReadUInt32(nPropId).ReadUInt32(nPropOfs); + if (!pStrm->good()) + break; + auto nCurrent = pStrm->Tell(); + sal_uInt64 nOffset = nPropOfs + nSecOfs; + if (nOffset != pStrm->Seek(nOffset)) + break; if ( nPropId ) // do not read dictionary { - - pStrm->ReadUInt32( nPropType ); + sal_uInt32 nPropType(0), nVectorCount(0); + pStrm->ReadUInt32(nPropType); nPropSize = 4; @@ -360,6 +364,7 @@ void Section::Read( SvStorageStream *pStrm ) pStrm->ReadUInt32( nPropType ); nPropSize += 4; } + sal_uInt32 nTemp(0); switch( nPropType ) { case VT_UI1 : @@ -457,11 +462,11 @@ void Section::Read( SvStorageStream *pStrm ) PropItem aPropItem; if ( GetProperty( 1, aPropItem ) ) { - sal_uInt16 nCodePage; aPropItem.ReadUInt32( nPropType ); if ( nPropType == VT_I2 ) { - aPropItem.ReadUInt16( nCodePage ); + sal_uInt16 nCodePage(0); + aPropItem.ReadUInt16(nCodePage); if ( nCodePage == 1200 ) { @@ -503,7 +508,7 @@ void Section::Read( SvStorageStream *pStrm ) AddProperty( 0xffffffff, pBuf, nSize ); delete[] pBuf; } - pStrm->Seek( nCurrent ); + pStrm->Seek(nCurrent); } pStrm->Seek( nSecOfs + nSecSize ); }
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits