From: Dominik Stadler Date: Sat, 19 Sep 2015 12:22:42 +0000 (+0000) Subject: Bug 57925: Add unit test and a simple fix to at least avoid the NPE when Workbooks... X-Git-Tag: REL_3_13_FINAL~11 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=12ace59f6e37d6c4dd96609fe9face402474f40b;p=poi.git Bug 57925: Add unit test and a simple fix to at least avoid the NPE when Workbooks have invalid external references git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1703999 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java b/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java index ce918926ca..cc590772de 100644 --- a/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java +++ b/src/java/org/apache/poi/ss/formula/OperationEvaluationContext.java @@ -94,7 +94,11 @@ public final class OperationEvaluationContext { if (externalSheet == null || externalSheet.getWorkbookName() == null) { // sheet is in same workbook targetEvaluator = _bookEvaluator; - otherFirstSheetIndex = _workbook.getSheetIndex(externalSheet.getSheetName()); + if(externalSheet == null) { + otherFirstSheetIndex = 0; + } else { + otherFirstSheetIndex = _workbook.getSheetIndex(externalSheet.getSheetName()); + } if (externalSheet instanceof ExternalSheetRange) { String lastSheetName = ((ExternalSheetRange)externalSheet).getLastSheetName(); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index f472e3d1d4..92661f8aee 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2846,4 +2846,22 @@ public final class TestBugs extends BaseTestBugzillaIssues { wb.close(); } + + @Test + public void test57925() throws IOException { + Workbook wb = HSSFTestDataSamples.openSampleWorkbook("57925.xls"); + + wb.getCreationHelper().createFormulaEvaluator().evaluateAll(); + + for(int i = 0;i < wb.getNumberOfSheets();i++) { + Sheet sheet = wb.getSheetAt(i); + for(Row row : sheet) { + for(Cell cell : row) { + new DataFormatter().formatCellValue(cell); + } + } + } + + wb.close(); + } } diff --git a/test-data/spreadsheet/57925.xls b/test-data/spreadsheet/57925.xls new file mode 100644 index 0000000000..ef13551ff4 Binary files /dev/null and b/test-data/spreadsheet/57925.xls differ