From a52cd3e05a735eea614e2b38f16d3bead2927752 Mon Sep 17 00:00:00 2001 From: Maxim Valyanskiy Date: Fri, 15 Jan 2010 12:25:15 +0000 Subject: [PATCH] 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 --- .../poi/hssf/record/RecordFactoryInputStream.java | 10 +++++----- .../org/apache/poi/hssf/record/RecordInputStream.java | 7 +++++++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java b/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java index 7ebe5177b..be48744ae 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 7333e39c7..268ea9731 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; + } }