diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-28 16:14:07 +0100 |
---|---|---|
committer | Andras Timar <andras.timar@collabora.com> | 2015-08-31 13:53:14 +0200 |
commit | f4c6049e742d3d1558fac32322b53672ca48137b (patch) | |
tree | 97b3c29e56c4a79d6cc1f0597f3bbb07a1028226 /sd/source/filter/ppt/pptin.cxx | |
parent | d58a58d027af25a445736ea16201e72d47e39fcc (diff) |
check stream status
Change-Id: I609c8c4f4e843601361b61f55e0325ad99db3c23
(cherry picked from commit dc1be62d75e654e17c2f4c02804b7fd48d5a2515)
Reviewed-on: https://gerrit.libreoffice.org/18119
Reviewed-by: David Tardon <dtardon@redhat.com>
Tested-by: David Tardon <dtardon@redhat.com>
Diffstat (limited to 'sd/source/filter/ppt/pptin.cxx')
-rw-r--r-- | sd/source/filter/ppt/pptin.cxx | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/sd/source/filter/ppt/pptin.cxx b/sd/source/filter/ppt/pptin.cxx index e5b15df50cb9..27f483d3fa66 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -278,7 +278,6 @@ bool ImplSdPPTImport::Import() if ( nSlideCount && pSection->GetProperty( PID_HEADINGPAIR, aPropItem ) ) { sal_uInt32 nSlideTitleIndex = 0, nSlideTitleCount = 0; - sal_uInt32 i, nTemp; OUString aUString; @@ -289,13 +288,14 @@ bool ImplSdPPTImport::Import() { nVecCount >>= 1; sal_uInt32 nEntryCount = 0; - for ( i = 0; i < nVecCount; i++ ) + for (sal_uInt32 i = 0; i < nVecCount; ++i) { if ( !aPropItem.Read( aUString, VT_EMPTY, false ) ) break; aPropItem.ReadUInt32( nType ); if ( ( nType != VT_I4 ) && ( nType != VT_UI4 ) ) break; + sal_uInt32 nTemp(0); aPropItem.ReadUInt32( nTemp ); if ( aUString == "Slide Titles" || aUString == "Folientitel" ) { @@ -310,17 +310,33 @@ bool ImplSdPPTImport::Import() aPropItem.ReadUInt32( nType ) .ReadUInt32( nVecCount ); - if ( ( nVecCount >= ( nSlideTitleIndex + nSlideTitleCount ) ) - && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ) + bool bVecOk = ( ( nVecCount >= (nSlideTitleIndex + nSlideTitleCount) ) + && ( nType == ( VT_LPSTR | VT_VECTOR ) ) ); + + if (bVecOk) { - for ( i = 0; i != nSlideTitleIndex; i++ ) + for (sal_uInt32 i = 0; i != nSlideTitleIndex; ++i) { - aPropItem.ReadUInt32( nTemp ); - aPropItem.SeekRel( nTemp ); + sal_uInt32 nTemp(0); + aPropItem.ReadUInt32(nTemp); + if (!aPropItem.good()) + { + bVecOk = false; + break; + } + auto nPos = aPropItem.Tell() + nTemp; + if (nPos != aPropItem.Seek(nPos)) + { + bVecOk = false; + break; + } } - for ( i = 0; i < nSlideTitleCount; i++ ) + } + if (bVecOk) + { + for (sal_uInt32 i = 0; i < nSlideTitleCount; ++i) { - if ( !aPropItem.Read( aUString, nType, false ) ) + if (!aPropItem.Read(aUString, nType, false)) break; OUString aString( aUString ); |