]> source.dussan.org Git - poi.git/commitdiff
bug#48068: RecordFormatException: The content of an excel record cannot exceed 8224...
authorMaxim Valyanskiy <maxcom@apache.org>
Fri, 15 Jan 2010 12:25:15 +0000 (12:25 +0000)
committerMaxim Valyanskiy <maxcom@apache.org>
Fri, 15 Jan 2010 12:25:15 +0000 (12:25 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@899608 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java
src/java/org/apache/poi/hssf/record/RecordInputStream.java

index 7ebe5177bd7b364c3f55d6c9d5fb06a5b4cf41f0..be48744ae632a32da692a338952f2ecd56d8b40e 100644 (file)
@@ -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)
index 7333e39c789b056ac93a886784fabce1356c56fc..268ea9731f2f42ccb80130c7288321bdf7bfdfec 100644 (file)
@@ -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;
+    }
 }