summaryrefslogtreecommitdiff
path: root/filter
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2022-01-04 21:27:40 +0000
committerCaolán McNamara <caolanm@redhat.com>2022-01-06 18:14:30 +0100
commitd5288dd29611f2e5c4140724255cea8e7bb2b25b (patch)
tree182782c3d44aaa00fce12be2f49648e5b374e7b4 /filter
parent67fb363eed88b15eec7821fe604eb23d142d84cc (diff)
ofz#42785 Timeout
Stream::Seek (like istream::seekg) clears any eofbit Change-Id: I90253e69a52c4099aa2971294a215dff37e8a246 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/127975 Tested-by: Caolán McNamara <caolanm@redhat.com> Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'filter')
-rw-r--r--filter/source/msfilter/dffrecordheader.cxx35
1 files changed, 14 insertions, 21 deletions
diff --git a/filter/source/msfilter/dffrecordheader.cxx b/filter/source/msfilter/dffrecordheader.cxx
index 2a8c91a89b1b..c94bec53b611 100644
--- a/filter/source/msfilter/dffrecordheader.cxx
+++ b/filter/source/msfilter/dffrecordheader.cxx
@@ -22,28 +22,21 @@
bool ReadDffRecordHeader(SvStream& rIn, DffRecordHeader& rRec)
{
rRec.nFilePos = rIn.Tell();
- if (rIn.remainingSize() >= 8)
- {
- sal_uInt16 nTmp(0);
- rIn.ReadUInt16(nTmp);
- rRec.nImpVerInst = nTmp;
- rRec.nRecVer = sal::static_int_cast<sal_uInt8>(nTmp & 0x000F);
- rRec.nRecInstance = nTmp >> 4;
- rIn.ReadUInt16(rRec.nRecType);
- rIn.ReadUInt32(rRec.nRecLen);
+ sal_uInt16 nTmp(0);
+ rIn.ReadUInt16(nTmp);
+ rRec.nImpVerInst = nTmp;
+ rRec.nRecVer = sal::static_int_cast<sal_uInt8>(nTmp & 0x000F);
+ rRec.nRecInstance = nTmp >> 4;
+ rRec.nRecType = 0;
+ rIn.ReadUInt16(rRec.nRecType);
+ rRec.nRecLen = 0;
+ rIn.ReadUInt32(rRec.nRecLen);
+
+ // preserving overflow, optimally we would check
+ // the record size against the parent header
+ if (rRec.nRecLen > (SAL_MAX_UINT32 - rRec.nFilePos))
+ rIn.SetError(SVSTREAM_FILEFORMAT_ERROR);
- // preserving overflow, optimally we would check
- // the record size against the parent header
- if (rRec.nRecLen > (SAL_MAX_UINT32 - rRec.nFilePos))
- rIn.SetError(SVSTREAM_FILEFORMAT_ERROR);
- }
- else
- {
- rRec.nImpVerInst = 0;
- rRec.nRecVer = 0;
- rRec.nRecInstance = 0;
- rIn.Seek(STREAM_SEEK_TO_END);
- }
return rIn.good();
}