Author: fanningpj
Date: Sun Aug  9 21:15:15 2020
New Revision: 1880727

URL: http://svn.apache.org/viewvc?rev=1880727&view=rev
Log:
[github-187] Add length validation for Excel DataValidations that are list 
literals. Thanks to Leo Webb. This closes #187

Added:
    poi/trunk/test-data/spreadsheet/DataValidationListTooLong.xlsx   (with 
props)
Modified:
    poi/trunk/src/multimodule/scratchpad/java9/module-info.class
    poi/trunk/src/multimodule/scratchpad/test9/module-info.class
    
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java
    
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidationConstraint.java

Modified: poi/trunk/src/multimodule/scratchpad/java9/module-info.class
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/multimodule/scratchpad/java9/module-info.class?rev=1880727&r1=1880726&r2=1880727&view=diff
==============================================================================
Binary files - no diff available.

Modified: poi/trunk/src/multimodule/scratchpad/test9/module-info.class
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/multimodule/scratchpad/test9/module-info.class?rev=1880727&r1=1880726&r2=1880727&view=diff
==============================================================================
Binary files - no diff available.

Modified: 
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java?rev=1880727&r1=1880726&r2=1880727&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java
 (original)
+++ 
poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFDataValidationConstraint.java
 Sun Aug  9 21:15:15 2020
@@ -30,12 +30,14 @@ import org.openxmlformats.schemas.spread
 public class XSSFDataValidationConstraint implements DataValidationConstraint {
     /**
      * Excel validation constraints with static lists are delimited with 
optional whitespace and the Windows List Separator,
-     * which is typically comma, but can be changed by users.  POI will just 
assume comma.
+     * which is typically comma, but can be changed by users. POI will just 
assume comma.
+        * In addition, Excel validation with static lists has a maximum size 
of 255 characters, including separators and excluding quotes.
      */
     private static final String LIST_SEPARATOR = ",";
     private static final Pattern LIST_SPLIT_REGEX = Pattern.compile("\\s*" + 
LIST_SEPARATOR + "\\s*");
     private static final String QUOTE = "\"";
-    
+       private static final int MAX_EXPLICIT_LIST_LENGTH = 257;
+
        private String formula1;
        private String formula2;
        private int validationType = -1;
@@ -204,6 +206,9 @@ public class XSSFDataValidationConstrain
                        if (isFormulaEmpty(formula1)) {
                                throw new IllegalArgumentException("A valid 
formula or a list of values must be specified for list validation.");
                        }
+                       if(formula1.length() > MAX_EXPLICIT_LIST_LENGTH) {
+                               throw new IllegalArgumentException("A valid 
formula or a list of values must be less than or equal to 255 characters 
(including separators).");
+                       }
                } else  {
                        if( isFormulaEmpty(formula1) ) {
                                throw new IllegalArgumentException("Formula is 
not specified. Formula is required for all validation types except explicit 
list validation.");

Modified: 
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidationConstraint.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidationConstraint.java?rev=1880727&r1=1880726&r2=1880727&view=diff
==============================================================================
--- 
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidationConstraint.java
 (original)
+++ 
poi/trunk/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFDataValidationConstraint.java
 Sun Aug  9 21:15:15 2020
@@ -18,11 +18,18 @@ package org.apache.poi.xssf.usermodel;
 
 import static org.junit.Assert.*;
 
+import org.apache.poi.ss.formula.DataValidationEvaluator;
 import org.apache.poi.ss.usermodel.DataValidationConstraint;
 import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
+import org.apache.poi.xssf.XSSFTestDataSamples;
 import org.apache.poi.ss.usermodel.DataValidationConstraint.OperatorType;
+import org.apache.poi.ss.util.CellReference;
 import org.junit.Test;
 
+import java.util.Collections;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+
 public class TestXSSFDataValidationConstraint {
     static final int listType = ValidationType.LIST;
     static final int ignoredType = OperatorType.IGNORED;
@@ -52,6 +59,20 @@ public class TestXSSFDataValidationConst
     }
 
     @Test
+    public void listLiteralsGreaterThan255CharactersThrows() {
+        String[] literal = IntStream.range(0, 129).mapToObj(i -> 
"a").toArray(String[]::new);
+        assertThrows(IllegalArgumentException.class, () -> new 
XSSFDataValidationConstraint(literal));
+    }
+    
+    @Test
+    public void dataValidationListLiteralTooLongFromFile() {
+        XSSFWorkbook wb = 
XSSFTestDataSamples.openSampleWorkbook("DataValidationListTooLong.xlsx");
+        XSSFFormulaEvaluator fEval = 
wb.getCreationHelper().createFormulaEvaluator();
+        DataValidationEvaluator dvEval = new DataValidationEvaluator(wb, 
fEval);
+        assertThrows(IllegalArgumentException.class, () -> 
dvEval.getValidationValuesForCell(new CellReference("Sheet0!A1")));
+    }
+
+    @Test
     public void rangeReference() {
         // (unnamed range) reference list
         String reference = "A1:A5";

Added: poi/trunk/test-data/spreadsheet/DataValidationListTooLong.xlsx
URL: 
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/DataValidationListTooLong.xlsx?rev=1880727&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/DataValidationListTooLong.xlsx
------------------------------------------------------------------------------
--- svn:mime-type (added)
+++ svn:mime-type Sun Aug  9 21:15:15 2020
@@ -0,0 +1 @@
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@poi.apache.org
For additional commands, e-mail: commits-h...@poi.apache.org

Reply via email to