summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2015-07-15 12:18:10 +0100
committerCaolán McNamara <caolanm@redhat.com>2015-07-15 20:03:34 +0100
commit15dfcb7f461893f83abcf28bfe01a4164209a160 (patch)
tree9c23b9081f2bed28036450016f15fee058eadb4d
parentb8637e67d6d39e47d22cfce496000288f0dc58d8 (diff)
don't hang with 0 len causing no progression
Change-Id: Ie553dab291c7bfbde033d89b84159aff6b42a160
-rw-r--r--filter/qa/cppunit/data/met/fail/hang-1.metbin0 -> 600 bytes
-rw-r--r--filter/source/graphicfilter/ios2met/ios2met.cxx12
2 files changed, 9 insertions, 3 deletions
diff --git a/filter/qa/cppunit/data/met/fail/hang-1.met b/filter/qa/cppunit/data/met/fail/hang-1.met
new file mode 100644
index 000000000000..c1a095d3fad5
--- /dev/null
+++ b/filter/qa/cppunit/data/met/fail/hang-1.met
Binary files differ
diff --git a/filter/source/graphicfilter/ios2met/ios2met.cxx b/filter/source/graphicfilter/ios2met/ios2met.cxx
index f1b99812f092..f152963d253b 100644
--- a/filter/source/graphicfilter/ios2met/ios2met.cxx
+++ b/filter/source/graphicfilter/ios2met/ios2met.cxx
@@ -2239,7 +2239,6 @@ void OS2METReader::ReadImageData(sal_uInt16 nDataID, sal_uInt16 nDataLen)
void OS2METReader::ReadFont(sal_uInt16 nFieldSize)
{
sal_uLong nPos, nMaxPos;
- sal_uInt16 nLen;
sal_uInt8 nByte, nTripType, nTripType2;
OSFont * pF=new OSFont;
pF->pSucc=pFontList; pFontList=pF;
@@ -2251,7 +2250,13 @@ void OS2METReader::ReadFont(sal_uInt16 nFieldSize)
nMaxPos=nPos+(sal_uLong)nFieldSize;
pOS2MET->SeekRel(2); nPos+=2;
while (nPos<nMaxPos && pOS2MET->GetError()==0) {
- pOS2MET->ReadUChar( nByte ); nLen =((sal_uInt16)nByte) & 0x00ff;
+ pOS2MET->ReadUChar( nByte );
+ sal_uInt16 nLen = ((sal_uInt16)nByte) & 0x00ff;
+ if (nLen == 0)
+ {
+ pOS2MET->SetError(SVSTREAM_FILEFORMAT_ERROR);
+ ErrorCode=4;
+ }
pOS2MET->ReadUChar( nTripType );
switch (nTripType) {
case 0x02:
@@ -2303,7 +2308,8 @@ void OS2METReader::ReadFont(sal_uInt16 nFieldSize)
break;
}
}
- nPos+=nLen; pOS2MET->Seek(nPos);
+ nPos+=nLen;
+ pOS2MET->Seek(nPos);
}
}