summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
Diffstat (limited to 'sw')
-rw-r--r--sw/qa/core/data/ww8/pass/hang-6.docbin0 -> 28160 bytes
-rw-r--r--sw/source/filter/ww8/ww8par.cxx22
2 files changed, 13 insertions, 9 deletions
diff --git a/sw/qa/core/data/ww8/pass/hang-6.doc b/sw/qa/core/data/ww8/pass/hang-6.doc
new file mode 100644
index 000000000000..48293c5fa93e
--- /dev/null
+++ b/sw/qa/core/data/ww8/pass/hang-6.doc
Binary files differ
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index b476bb8b4841..b02ae7199ac6 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -679,16 +679,22 @@ SdrObject* SwMSDffManager::ProcessObj(SvStream& rSt,
SEEK_FROM_CURRENT_AND_RESTART )
&& maShapeRecords.Current()->nRecLen )
{
- sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen;
- sal_uInt32 nUDData;
- sal_uInt16 nPID;
+ sal_uInt32 nBytesLeft = maShapeRecords.Current()->nRecLen;
+ auto nAvailableBytes = rSt.remainingSize();
+ if (nBytesLeft > nAvailableBytes)
+ {
+ SAL_WARN("sw.ww8", "Document claimed to have shape record of " << nBytesLeft << " bytes, but only " << nAvailableBytes << " available");
+ nBytesLeft = nAvailableBytes;
+ }
while( 5 < nBytesLeft )
{
- rSt.ReadUInt16( nPID );
- if ( rSt.GetError() != 0 )
+ sal_uInt16 nPID(0);
+ rSt.ReadUInt16(nPID);
+ sal_uInt32 nUDData(0);
+ rSt.ReadUInt32(nUDData);
+ if (!rSt.good())
break;
- rSt.ReadUInt32( nUDData );
- switch( nPID )
+ switch (nPID)
{
case 0x038F: pImpRec->nXAlign = nUDData; break;
case 0x0390:
@@ -716,8 +722,6 @@ SdrObject* SwMSDffManager::ProcessObj(SvStream& rSt,
pImpRec->isHorizontalRule = true;
break;
}
- if ( rSt.GetError() != 0 )
- break;
nBytesLeft -= 6;
}
}