You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/07/28 16:56:36 UTC
svn commit: r1891858 - in /poi/trunk/poi/src:
main/java/org/apache/poi/ss/formula/functions/DateValue.java
test/java/org/apache/poi/ss/formula/functions/TestDateValue.java
Author: fanningpj
Date: Wed Jul 28 16:56:36 2021
New Revision: 1891858
URL: http://svn.apache.org/viewvc?rev=1891858&view=rev
Log:
[bug-65165] invalid date values not handled correctly in DateValue function
Modified:
poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/DateValue.java
poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDateValue.java
Modified: poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/DateValue.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/DateValue.java?rev=1891858&r1=1891857&r2=1891858&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/DateValue.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/ss/formula/functions/DateValue.java Wed Jul 28 16:56:36 2021
@@ -17,14 +17,14 @@
package org.apache.poi.ss.formula.functions;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.ss.formula.eval.*;
import org.apache.poi.ss.util.DateParser;
-import org.apache.poi.ss.formula.eval.BlankEval;
-import org.apache.poi.ss.formula.eval.EvaluationException;
-import org.apache.poi.ss.formula.eval.NumberEval;
-import org.apache.poi.ss.formula.eval.OperandResolver;
-import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.usermodel.DateUtil;
+import java.time.DateTimeException;
+
/**
* Implementation for the DATEVALUE() Excel function.<p>
*
@@ -44,6 +44,8 @@ import org.apache.poi.ss.usermodel.DateU
*/
public class DateValue extends Fixed1ArgFunction {
+ private static final Logger LOG = LogManager.getLogger(DateValue.class);
+
@Override
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex, ValueEval dateTextArg) {
try {
@@ -55,6 +57,9 @@ public class DateValue extends Fixed1Arg
}
return new NumberEval(DateUtil.getExcelDate(DateParser.parseLocalDate(dateText)));
+ } catch (DateTimeException dte) {
+ LOG.atInfo().log("Failed to parse date", dte);
+ return ErrorEval.VALUE_INVALID;
} catch (EvaluationException e) {
return e.getErrorEval();
}
Modified: poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDateValue.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDateValue.java?rev=1891858&r1=1891857&r2=1891858&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDateValue.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/ss/formula/functions/TestDateValue.java Wed Jul 28 16:56:36 2021
@@ -25,11 +25,7 @@ import java.time.Year;
import java.time.temporal.ChronoUnit;
import java.util.Locale;
-import org.apache.poi.ss.formula.eval.BlankEval;
-import org.apache.poi.ss.formula.eval.ErrorEval;
-import org.apache.poi.ss.formula.eval.NumberEval;
-import org.apache.poi.ss.formula.eval.StringEval;
-import org.apache.poi.ss.formula.eval.ValueEval;
+import org.apache.poi.ss.formula.eval.*;
import org.apache.poi.util.LocaleUtil;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
@@ -88,6 +84,16 @@ final class TestDateValue {
}
}
+ @Test
+ void testInvalidDateValue() {
+ assertEquals(ErrorEval.VALUE_INVALID, invokeDateValue(new StringEval("not-date")),
+ "not-date evals to invalid");
+ assertEquals(ErrorEval.VALUE_INVALID, invokeDateValue(BoolEval.FALSE),
+ "false evals to invalid");
+ assertEquals(ErrorEval.VALUE_INVALID, invokeDateValue(new NumberEval(Math.E)),
+ "Math.E evals to invalid");
+ }
+
private ValueEval invokeDateValue(ValueEval text) {
return new DateValue().evaluate(0, 0, text);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org