diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-01-09 16:27:15 +0000 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2018-01-09 20:41:58 +0100 |
commit | ea2f3e285f680820e960c1cb1756a93cfe8ff262 (patch) | |
tree | 630f06b9feae75c054ad9d68acce41448a6cc3fd /filter | |
parent | 449b0fe2ebdc04b3e7be547b151bef97acbb14ea (diff) |
ofz#5154 limit depth to max legal depth
i <= 5 was nonsense here
Change-Id: Ic1b0daf874b9df13ad012d11efaee1c31a47b1d6
Reviewed-on: https://gerrit.libreoffice.org/47668
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/msfilter/svdfppt.cxx | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/filter/source/msfilter/svdfppt.cxx b/filter/source/msfilter/svdfppt.cxx index f1b8c65759d6..b0d9107dbf39 100644 --- a/filter/source/msfilter/svdfppt.cxx +++ b/filter/source/msfilter/svdfppt.cxx @@ -3328,22 +3328,17 @@ PPTExtParaProv::PPTExtParaProv( SdrPowerPointImport& rMan, SvStream& rSt, const if ( aHd.nRecInstance < PPT_STYLESHEETENTRYS ) { sal_uInt16 nDepth = 0, i = 0; - rSt.ReadUInt16( nDepth ); - if ( i <= 5 ) + rSt.ReadUInt16(nDepth); + nDepth = std::min<sal_uInt16>(nDepth, nMaxPPTLevels); + auto nHdEndRecPos = DffPropSet::SanitizeEndPos(rSt, aHd.GetRecEndFilePos()); + while ( ( rSt.GetError() == ERRCODE_NONE ) && ( rSt.Tell() < nHdEndRecPos ) && ( i < nDepth ) ) { - auto nHdEndRecPos = DffPropSet::SanitizeEndPos(rSt, aHd.GetRecEndFilePos()); - while ( ( rSt.GetError() == ERRCODE_NONE ) && ( rSt.Tell() < nHdEndRecPos ) && ( i < nDepth ) ) - { - bStyles = true; - ReadPPTExtParaLevel( rSt, aExtParaSheet[ (TSS_Type)aHd.nRecInstance ].aExtParaLevel[ i++ ] ); - } -#ifdef DBG_UTIL - if ( rSt.Tell() != aHd.GetRecEndFilePos() ) - OSL_FAIL( "PPTExParaProv::PPTExParaProv - error reading PPT_PST_ExtendedParagraphMasterAtom (SJ)" ); -#endif + bStyles = true; + ReadPPTExtParaLevel( rSt, aExtParaSheet[ (TSS_Type)aHd.nRecInstance ].aExtParaLevel[ i++ ] ); } #ifdef DBG_UTIL - else OSL_FAIL( "PPTExParaProv::PPTExParaProv - depth is greater than 5 (SJ)" ); + if ( rSt.Tell() != aHd.GetRecEndFilePos() ) + OSL_FAIL( "PPTExParaProv::PPTExParaProv - error reading PPT_PST_ExtendedParagraphMasterAtom (SJ)" ); #endif } #ifdef DBG_UTIL @@ -3422,8 +3417,9 @@ bool PPTNumberFormatCreator::ImplGetExtNumberFormat( SdrPowerPointImport const & } if ( ( nBuFlags & 0x03800000 ) != 0x03800000 ) // merge style sheet - { // we have to read the master attributes - if ( pParaProv && ( nLevel < 5 ) ) + { + // we have to read the master attributes + if (pParaProv && nLevel < nMaxPPTLevels) { if ( pParaProv->bStyles ) { |