]> source.dussan.org Git - poi.git/commitdiff
Bug 55982: Don't fail to open the spreadsheet if no TabIdRecord is found
authorDominik Stadler <centic@apache.org>
Sun, 3 Apr 2016 18:32:22 +0000 (18:32 +0000)
committerDominik Stadler <centic@apache.org>
Sun, 3 Apr 2016 18:32:22 +0000 (18:32 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1737602 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/model/InternalWorkbook.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
test-data/spreadsheet/55982.xls [new file with mode: 0644]

index 0b11818fdf68448926fe4e92ea7db63ffbe1ee26..7ca7c942df3814b72e686c0a5fd3694e635af4e9 100644 (file)
@@ -801,20 +801,24 @@ public final class InternalWorkbook {
 
     /**
      * make the tabid record look like the current situation.
-     *
-     * @return number of bytes written in the TabIdRecord
      */
-    private int fixTabIdRecord() {
-        TabIdRecord tir = ( TabIdRecord ) records.get(records.getTabpos());
-        int sz = tir.getRecordSize();
+    private void fixTabIdRecord() {
+        Record rec = records.get(records.getTabpos());
+
+        // see bug 55982, quite a number of documents do not have a TabIdRecord and
+        // thus there is no way to do the fixup here,
+        // we use the same check on Tabpos as done in other places
+        if(records.getTabpos() <= 0) {
+            return;
+        }
+
+        TabIdRecord tir = ( TabIdRecord ) rec;
         short[]     tia = new short[ boundsheets.size() ];
 
         for (short k = 0; k < tia.length; k++) {
             tia[ k ] = k;
         }
         tir.setTabIdArray(tia);
-        return tir.getRecordSize() - sz;
-
     }
 
     /**
index 7cc9b4ea59508cec275a59ce23889c07ea2615a3..17861e289a2b763bc9c61965ab9a3a8336556fa4 100644 (file)
@@ -3001,4 +3001,12 @@ public final class TestBugs extends BaseTestBugzillaIssues {
 
         wb.close();
     }
+
+    @Test
+    public void test55982() throws IOException {
+        Workbook wb = HSSFTestDataSamples.openSampleWorkbook("55982.xls");
+        Sheet newSheet = wb.cloneSheet(1);
+        assertNotNull(newSheet);
+        wb.close();
+    }
 }
diff --git a/test-data/spreadsheet/55982.xls b/test-data/spreadsheet/55982.xls
new file mode 100644 (file)
index 0000000..2e09ddb
Binary files /dev/null and b/test-data/spreadsheet/55982.xls differ