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); + } + +}