diff options
author | Caolán McNamara <caolanm@redhat.com> | 2015-08-28 16:14:07 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2015-08-28 20:06:38 +0100 |
commit | dc1be62d75e654e17c2f4c02804b7fd48d5a2515 (patch) | |
tree | 0cc57d8edaac4645dcdd0b3518ae97ee595f4b56 /sd/source | |
parent | 078235028a8c4ea36b6b366348016e19759c456a (diff) |
check stream status
Change-Id: I609c8c4f4e843601361b61f55e0325ad99db3c23
Diffstat (limited to 'sd/source')
-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 530be9c158d1..76f331d191dd 100644 --- a/sd/source/filter/ppt/pptin.cxx +++ b/sd/source/filter/ppt/pptin.cxx @@ -280,7 +280,6 @@ bool ImplSdPPTImport::Import() if ( nSlideCount && pSection->GetProperty( PID_HEADINGPAIR, aPropItem ) ) { sal_uInt32 nSlideTitleIndex = 0, nSlideTitleCount = 0; - sal_uInt32 i, nTemp; OUString aUString; @@ -291,13 +290,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" ) { @@ -312,17 +312,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 ); |