diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-26 12:35:01 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-08-31 13:53:02 +0200 |
commit | 1d9b92c3ef4b7a3a498eadae69ffebf26046e27c (patch) | |
tree | 37a9c4a336bb65bf83de07ccb34fb1986c16ce7d /filter/source/msfilter | |
parent | d33cd7dc8865d7b8ecda5af6cfe6f94d86cb1c7a (diff) |
don't hang on unreachable record ends
Change-Id: I288f7ff0327831603eda6e827c8acbae678dfaff
(cherry picked from commit cadac8400a018c8c566379f7767ea5edff78523d)
Reviewed-on: https://gerrit.libreoffice.org/18021
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'filter/source/msfilter')
-rw-r--r-- | filter/source/msfilter/svdfppt.cxx | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index 94185f108588..fb6d3a6a3c40 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -4072,8 +4072,18 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd } rSlideHd.SeekToContent( rIn ); + + auto nEndRecPos = rSlideHd.GetRecEndFilePos(); + auto nStreamLen = rIn.Tell() + rIn.remainingSize(); + if (nEndRecPos > nStreamLen) + { + SAL_WARN("filter.ms", "Parsing error: " << nStreamLen << + " max end pos, but " << nEndRecPos << " claimed, truncating"); + nEndRecPos = nStreamLen; + } + DffRecordHeader aTxMasterStyleHd; - while ( rIn.Tell() < rSlideHd.GetRecEndFilePos() ) + while (rIn.Tell() < nEndRecPos) { ReadDffRecordHeader( rIn, aTxMasterStyleHd ); if ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) @@ -4081,7 +4091,7 @@ PPTStyleSheet::PPTStyleSheet( const DffRecordHeader& rSlideHd, SvStream& rIn, Sd else aTxMasterStyleHd.SeekToEndOfRecord( rIn ); } - while ( ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) && ( rIn.Tell() < rSlideHd.GetRecEndFilePos() ) ) //TODO: aTxMasterStyleHd may be used without having been properly initialized + while ( ( aTxMasterStyleHd.nRecType == PPT_PST_TxMasterStyleAtom ) && ( rIn.Tell() < nEndRecPos ) ) //TODO: aTxMasterStyleHd may be used without having been properly initialized { sal_uInt32 nInstance = aTxMasterStyleHd.nRecInstance; if ( ( nInstance < PPT_STYLESHEETENTRYS ) && |