diff options
author | Dominik Stadler <centic@apache.org> | 2015-04-13 12:19:11 +0000 |
---|---|---|
committer | Dominik Stadler <centic@apache.org> | 2015-04-13 12:19:11 +0000 |
commit | 2c7987545b7f9bc6cab84a9c812c512092ad7fc9 (patch) | |
tree | 55436e7e22f94e422d79854de1b913eef7c795e1 | |
parent | 690abbe5547df702ce83cf2fe63a3bc4c00f1df6 (diff) | |
download | poi-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.java | 11 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java | 10 | ||||
-rw-r--r-- | test-data/spreadsheet/57163.xls | bin | 0 -> 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 Binary files differnew file mode 100644 index 0000000000..402c954e19 --- /dev/null +++ b/test-data/spreadsheet/57163.xls |