From 6349d2c61448cb7c6874ca2e8da3a459eb3b4922 Mon Sep 17 00:00:00 2001 From: Greg Woolsey Date: Tue, 14 Mar 2017 21:39:33 +0000 Subject: [PATCH] Fixed #60858, which showed a regression of the fix for #56420 introduced by my refactoring to fix #56822. Includes new unit test based on the bug sample file. git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1786953 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/formula/functions/Baseifs.java | 3 +- .../ss/formula/functions/TestSumifsXSSF.java | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 src/ooxml/testcases/org/apache/poi/ss/formula/functions/TestSumifsXSSF.java diff --git a/src/java/org/apache/poi/ss/formula/functions/Baseifs.java b/src/java/org/apache/poi/ss/formula/functions/Baseifs.java index 2fcc3c668..88ce9e3f4 100644 --- a/src/java/org/apache/poi/ss/formula/functions/Baseifs.java +++ b/src/java/org/apache/poi/ss/formula/functions/Baseifs.java @@ -135,7 +135,8 @@ import org.apache.poi.ss.formula.functions.Countif.ErrorMatcher; AreaEval aeRange = ranges[i]; I_MatchPredicate mp = predicates[i]; - if (!mp.matches(aeRange.getRelativeValue(r, c))) { + // Bugs 60858 and 56420 show predicate can be null + if (mp == null || !mp.matches(aeRange.getRelativeValue(r, c))) { matches = false; break; } diff --git a/src/ooxml/testcases/org/apache/poi/ss/formula/functions/TestSumifsXSSF.java b/src/ooxml/testcases/org/apache/poi/ss/formula/functions/TestSumifsXSSF.java new file mode 100644 index 000000000..7ae18e8de --- /dev/null +++ b/src/ooxml/testcases/org/apache/poi/ss/formula/functions/TestSumifsXSSF.java @@ -0,0 +1,31 @@ +package org.apache.poi.ss.formula.functions; + +import static org.junit.Assert.assertEquals; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.FormulaEvaluator; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.XSSFTestDataSamples; +import org.junit.Test; + +/** + * + */ +public class TestSumifsXSSF { + + /** + * handle null cell predicate + */ + @Test + public void testBug60858() { + Workbook wb = XSSFTestDataSamples.openSampleWorkbook("bug60858.xlsx"); + FormulaEvaluator fe = wb.getCreationHelper().createFormulaEvaluator(); + + Sheet sheet = wb.getSheetAt(0); + Cell cell = sheet.getRow(1).getCell(5); + fe.evaluate(cell); + assertEquals(0.0, cell.getNumericCellValue(), 0.0000000000000001); + } + +}