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