bug#48068: RecordFormatException: The content of an excel record cannot exceed 8224 bytes

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@899608 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Maxim Valyanskiy 2010-01-15 12:25:15 +00:00
parent 4be190d69d
commit a52cd3e05a
2 changed files with 12 additions and 5 deletions

View File

@ -218,21 +218,21 @@ public final class RecordFactoryInputStream {
return null; return null;
} }
// step underlying RecordInputStream to the next record
_recStream.nextRecord();
if (_lastRecordWasEOFLevelZero) { if (_lastRecordWasEOFLevelZero) {
// Potential place for ending the workbook stream // Potential place for ending the workbook stream
// Check that the next record is not BOFRecord(0x0809) // Check that the next record is not BOFRecord(0x0809)
// Normally the input stream contains only zero padding after the last EOFRecord, // Normally the input stream contains only zero padding after the last EOFRecord,
// but bug 46987 suggests that the padding may be garbage. // but bug 46987 and 48068 suggests that the padding may be garbage.
// This code relies on the padding bytes not starting with BOFRecord.sid // This code relies on the padding bytes not starting with BOFRecord.sid
if (_recStream.getSid() != BOFRecord.sid) { if (_recStream.getNextSid() != BOFRecord.sid) {
return null; return null;
} }
// else - another sheet substream starting here // else - another sheet substream starting here
} }
// step underlying RecordInputStream to the next record
_recStream.nextRecord();
r = readNextRecord(); r = readNextRecord();
if (r == null) { if (r == null) {
// some record types may get skipped (e.g. DBCellRecord and ContinueRecord) // some record types may get skipped (e.g. DBCellRecord and ContinueRecord)

View File

@ -428,4 +428,11 @@ public final class RecordInputStream implements LittleEndianInput {
// and before the formatting run data) // and before the formatting run data)
return _nextSid == ContinueRecord.sid; return _nextSid == ContinueRecord.sid;
} }
/**
@requrn sid of next record. Can be called after hasNextRecord()
*/
public int getNextSid() {
return _nextSid;
}
} }