]> source.dussan.org Git - poi.git/commitdiff
fixed XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with...
authorYegor Kozlov <yegor@apache.org>
Sat, 4 Sep 2010 15:56:29 +0000 (15:56 +0000)
committerYegor Kozlov <yegor@apache.org>
Sat, 4 Sep 2010 15:56:29 +0000 (15:56 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@992629 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/record/BoundSheetRecord.java
src/java/org/apache/poi/ss/util/WorkbookUtil.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java

index c0ce8db185d808ad83bdf0b6b638340b1778b589..1a3771540acdcb102ac57a91dbdcd84856759acd 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.7-beta3" date="2010-??-??">
+           <action dev="poi-developers" type="fix">49875 - fixed  XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote (')</action>
            <action dev="poi-developers" type="fix">49873 - fixed  XSSFFormulaEvaluator to support blank cells</action>
            <action dev="poi-developers" type="fix">49850 - added a getter for _iStartAt in ListFormatOverrideLevel</action>
            <action dev="poi-developers" type="fix">49761 - change cell type to error when setting Double.NaN or Infinities</action>
index 7f73a1dd1874c778437ec3584faad5cb0ddb3a54..073a0c3bd07c186d4c47b5cdb8e9a6090fac5928 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.poi.util.BitFieldFactory;
 import org.apache.poi.util.HexDump;
 import org.apache.poi.util.LittleEndianOutput;
 import org.apache.poi.util.StringUtil;
+import org.apache.poi.ss.util.WorkbookUtil;
 
 /**
  * Title:        Bound Sheet Record (aka BundleSheet) (0x0085)<P>
@@ -90,42 +91,11 @@ public final class BoundSheetRecord extends StandardRecord {
         */
        public void setSheetname(String sheetName) {
 
-               validateSheetName(sheetName);
+               WorkbookUtil.validateSheetName(sheetName);
                field_5_sheetname = sheetName;
                field_4_isMultibyteUnicode = StringUtil.hasMultibyte(sheetName) ?  1 : 0;
        }
 
-       private static void validateSheetName(String sheetName) {
-               if (sheetName == null) {
-                       throw new IllegalArgumentException("sheetName must not be null");
-               }
-               int len = sheetName.length();
-               if (len < 1) {
-                       throw new IllegalArgumentException("sheetName must not be empty string");
-               }
-               for (int i=0; i<len; i++) {
-                       char ch = sheetName.charAt(i);
-                       switch (ch) {
-                               case '/':
-                               case '\\':
-                               case '?':
-                               case '*':
-                               case ']':
-                               case '[':
-                                       break;
-                               default:
-                                       // all other chars OK
-                                       continue;
-                       }
-                       throw new IllegalArgumentException("Invalid char (" + ch
-                                       + ") found at index (" + i + ") in sheet name '" + sheetName + "'");
-               }
-               if (sheetName.charAt(0) == '\'' || sheetName.charAt(len-1) == '\'') {
-                       throw new IllegalArgumentException("Invalid sheet name '" + sheetName
-                                       + "'. Sheet names must not begin or end with (').");
-               }
-       }
-
        /**
         * get the offset in bytes of the Beginning of File Marker within the HSSF Stream part of the POIFS file
         *
index 11e01a04b15143187e0d1452596efc0eeb30fc1d..6592ad96e919ca5a433e60f5badc2675283ccbde 100644 (file)
@@ -74,4 +74,59 @@ public class WorkbookUtil {
                }
                return result.toString();
        }
+
+    /**
+     * Validates sheet name.
+     *
+     * <p>
+     * The character count <tt>MUST</tt> be greater than or equal to 1 and less than or equal to 31.
+     * The string MUST NOT contain the any of the following characters:
+     * <ul>
+     * <li> 0x0000 </li>
+     * <li> 0x0003 </li>
+     * <li> colon (:) </li>
+     * <li> backslash (\) </li>
+     * <li> asterisk (*) </li>
+     * <li> question mark (?) </li>
+     * <li> forward slash (/) </li>
+     * <li> opening square bracket ([) </li>
+     * <li> closing square bracket (]) </li>
+     * </ul>
+     * The string MUST NOT begin or end with the single quote (') character.
+     * </p>
+     *
+     * @param sheetName the name to validate
+     */
+    public static void validateSheetName(String sheetName) {
+        if (sheetName == null) {
+            throw new IllegalArgumentException("sheetName must not be null");
+        }
+        int len = sheetName.length();
+        if (len < 1) {
+            throw new IllegalArgumentException("sheetName must not be empty string");
+        }
+        for (int i=0; i<len; i++) {
+            char ch = sheetName.charAt(i);
+            switch (ch) {
+                case '/':
+                case '\\':
+                case '?':
+                case '*':
+                case ']':
+                case '[':
+                case ':':
+                    break;
+                default:
+                    // all other chars OK
+                    continue;
+            }
+            throw new IllegalArgumentException("Invalid char (" + ch
+                    + ") found at index (" + i + ") in sheet name '" + sheetName + "'");
+        }
+        if (sheetName.charAt(0) == '\'' || sheetName.charAt(len-1) == '\'') {
+            throw new IllegalArgumentException("Invalid sheet name '" + sheetName
+                    + "'. Sheet names must not begin or end with (').");
+        }
+    }
+
 }
index 54f32fb1e78601f6e92e8a4fbc5f97c7b787ad81..d5256209a71ec7a2607bbe09fe25f37bf0842ccb 100644 (file)
@@ -51,6 +51,7 @@ import org.apache.poi.ss.usermodel.Sheet;
 import org.apache.poi.ss.usermodel.Workbook;
 import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
 import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.ss.util.WorkbookUtil;
 import org.apache.poi.util.*;
 import org.apache.poi.xssf.model.CalculationChain;
 import org.apache.poi.xssf.model.MapInfo;
@@ -511,7 +512,7 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
     }
 
     private CTSheet addSheet(String sheetname) {
-        validateSheetName(sheetname);
+        WorkbookUtil.validateSheetName(sheetname);
 
         CTSheet sheet = workbook.getSheets().addNewSheet();
         sheet.setName(sheetname);
@@ -1099,11 +1100,10 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
      * or contains /\?*[]
      *
      * @param sheet number (0 based)
-     * @see #validateSheetName(String)
      */
     public void setSheetName(int sheet, String name) {
         validateSheetIndex(sheet);
-        validateSheetName(name);
+        WorkbookUtil.validateSheetName(name);
         if (containsSheet(name, sheet ))
             throw new IllegalArgumentException( "The workbook already contains a sheet of this name" );
         workbook.getSheets().getSheetArray(sheet).setName(name);
@@ -1232,56 +1232,6 @@ public class XSSFWorkbook extends POIXMLDocument implements Workbook, Iterable<X
         return false;
     }
 
-    /**
-     * Validates sheet name.
-     *
-     * <p>
-     * The character count <tt>MUST</tt> be greater than or equal to 1 and less than or equal to 31.
-     * The string MUST NOT contain the any of the following characters:
-     * <ul>
-     * <li> 0x0000 </li>
-     * <li> 0x0003 </li>
-     * <li> colon (:) </li>
-     * <li> backslash (\) </li>
-     * <li> asterisk (*) </li>
-     * <li> question mark (?) </li>
-     * <li> forward slash (/) </li>
-     * <li> opening square bracket ([) </li>
-     * <li> closing square bracket (]) </li>
-     * </ul>
-     * The string MUST NOT begin or end with the single quote (') character.
-     * </p>
-     *
-     * @param sheetName the name to validate
-     */
-    private static void validateSheetName(String sheetName) {
-        if (sheetName == null) {
-            throw new IllegalArgumentException("sheetName must not be null");
-        }
-        int len = sheetName.length();
-        if (len < 1 || len > 31) {
-            throw new IllegalArgumentException("sheetName '" + sheetName
-                    + "' is invalid - must be 1-30 characters long");
-        }
-        for (int i=0; i<len; i++) {
-            char ch = sheetName.charAt(i);
-            switch (ch) {
-                case '/':
-                case '\\':
-                case '?':
-                case '*':
-                case ']':
-                case '[':
-                    break;
-                default:
-                    // all other chars OK
-                    continue;
-            }
-            throw new IllegalArgumentException("Invalid char (" + ch
-                    + ") found at index (" + i + ") in sheet name '" + sheetName + "'");
-        }
-     }
-
     /**
      * Gets a boolean value that indicates whether the date systems used in the workbook starts in 1904.
      * <p>
index c963f6eccc509ce32b31f0cdb12cdb24521f372b..67abf51b537d558ea76e30d4bdeda06af7e4b9ba 100644 (file)
@@ -72,7 +72,8 @@ public abstract class BaseTestWorkbook extends TestCase {
 
         //names cannot be blank or contain any of /\*?[]
         String[] invalidNames = {"", "Sheet/", "Sheet\\",
-                "Sheet?", "Sheet*", "Sheet[", "Sheet]"};
+                "Sheet?", "Sheet*", "Sheet[", "Sheet]", "'Sheet'",
+                "My:Sheet"};
         for (String sheetName : invalidNames) {
             try {
                 wb.createSheet(sheetName);