aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDominik Stadler <centic@apache.org>2015-04-13 12:19:11 +0000
committerDominik Stadler <centic@apache.org>2015-04-13 12:19:11 +0000
commit2c7987545b7f9bc6cab84a9c812c512092ad7fc9 (patch)
tree55436e7e22f94e422d79854de1b913eef7c795e1
parent690abbe5547df702ce83cf2fe63a3bc4c00f1df6 (diff)
downloadpoi-2c7987545b7f9bc6cab84a9c812c512092ad7fc9.tar.gz
poi-2c7987545b7f9bc6cab84a9c812c512092ad7fc9.zip
Bug 57163: Fix possible NullPointerException when a spreadsheet has no LinkTable and we try to adjust it during sheet removal.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1673168 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--src/java/org/apache/poi/hssf/model/InternalWorkbook.java11
-rw-r--r--src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java10
-rw-r--r--test-data/spreadsheet/57163.xlsbin0 -> 6656 bytes
3 files changed, 16 insertions, 5 deletions
diff --git a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
index 3c3b91b148..a2670978ea 100644
--- a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
+++ b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java
@@ -774,11 +774,12 @@ public final class InternalWorkbook {
}
}
- // also tell the LinkTable about the removed sheet
- // +1 because we already removed it from the count of sheets!
- for(int i = sheetIndex+1;i < getNumSheets()+1;i++) {
- // also update the link-table as otherwise references might point at invalid sheets
- linkTable.removeSheet(i);
+ if (linkTable != null) {
+ // also tell the LinkTable about the removed sheet
+ // +1 because we already removed it from the count of sheets!
+ for(int i = sheetIndex+1;i < getNumSheets()+1;i++) {
+ linkTable.removeSheet(i);
+ }
}
}
diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
index 73256b6897..0bb1de24b4 100644
--- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
+++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
@@ -2716,4 +2716,14 @@ public final class TestBugs extends BaseTestBugzillaIssues {
Workbook wb = openSample("57456.xls");
wb.close();
}
+
+ @Test
+ public void test57163() throws IOException {
+ Workbook wb = openSample("57163.xls");
+
+ while (wb.getNumberOfSheets() > 1) {
+ wb.removeSheetAt(1);
+ }
+ wb.close();
+ }
}
diff --git a/test-data/spreadsheet/57163.xls b/test-data/spreadsheet/57163.xls
new file mode 100644
index 0000000000..402c954e19
--- /dev/null
+++ b/test-data/spreadsheet/57163.xls
Binary files differ