diff --git a/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java b/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java index 6ba00cd055..233a69795e 100644 --- a/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java +++ b/poi/src/main/java/org/apache/poi/ss/formula/functions/Correl.java @@ -66,9 +66,13 @@ public class Correl extends Fixed2ArgFunction { private List getNumberArrays(ValueEval operand0, ValueEval operand1) throws EvaluationException { double[] retval0 = collectValuesWithBlanks(operand0).toArray(); double[] retval1 = collectValuesWithBlanks(operand1).toArray(); + if (retval0.length != retval1.length) { + throw new EvaluationException(ErrorEval.NA); + } DoubleList filtered0 = new DoubleList(); DoubleList filtered1 = new DoubleList(); - for (int i = 0; i < retval0.length; i++) { + int len = Math.min(retval0.length, retval1.length); + for (int i = 0; i < len; i++) { if (Double.isNaN(retval0[i]) || Double.isNaN(retval1[i])) { //ignore } else { diff --git a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCorrel.java b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCorrel.java index 68c3bea125..384cbdf561 100644 --- a/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCorrel.java +++ b/poi/src/test/java/org/apache/poi/ss/formula/functions/TestCorrel.java @@ -22,12 +22,14 @@ import org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.FormulaError; import org.junit.jupiter.api.Test; import java.io.IOException; import static org.apache.poi.ss.util.Utils.addRow; import static org.apache.poi.ss.util.Utils.assertDouble; +import static org.apache.poi.ss.util.Utils.assertError; /** * Tests for {@link Correl} @@ -68,6 +70,18 @@ final class TestCorrel { } } + @Test + void testMismatch() throws IOException { + try (HSSFWorkbook wb = initWorkbook1()) { + HSSFSheet sheet = wb.getSheetAt(0); + HSSFRow row = sheet.getRow(0); + HSSFCell cell = row.createCell(100); + HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); + assertError(fe, cell, "CORREL(A2:A6,B2:B5)", FormulaError.NA); + assertError(fe, cell, "CORREL(A2:B6,B2:B6)", FormulaError.NA); + } + } + private HSSFWorkbook initWorkbook1() { return initWorkbook1(Double.valueOf(15)); }