diff --git a/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java b/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java index 7ebe5177bd..be48744ae6 100644 --- a/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java @@ -218,21 +218,21 @@ public final class RecordFactoryInputStream { return null; } - // step underlying RecordInputStream to the next record - _recStream.nextRecord(); - if (_lastRecordWasEOFLevelZero) { // Potential place for ending the workbook stream // Check that the next record is not BOFRecord(0x0809) // 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 - if (_recStream.getSid() != BOFRecord.sid) { + if (_recStream.getNextSid() != BOFRecord.sid) { return null; } // else - another sheet substream starting here } + // step underlying RecordInputStream to the next record + _recStream.nextRecord(); + r = readNextRecord(); if (r == null) { // some record types may get skipped (e.g. DBCellRecord and ContinueRecord) diff --git a/src/java/org/apache/poi/hssf/record/RecordInputStream.java b/src/java/org/apache/poi/hssf/record/RecordInputStream.java index 7333e39c78..268ea9731f 100644 --- a/src/java/org/apache/poi/hssf/record/RecordInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordInputStream.java @@ -428,4 +428,11 @@ public final class RecordInputStream implements LittleEndianInput { // and before the formatting run data) return _nextSid == ContinueRecord.sid; } + + /** + @requrn sid of next record. Can be called after hasNextRecord() + */ + public int getNextSid() { + return _nextSid; + } }