You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2010/09/04 17:56:29 UTC

svn commit: r992629 - in /poi/trunk/src: documentation/content/xdocs/ java/org/apache/poi/hssf/record/ java/org/apache/poi/ss/util/ ooxml/java/org/apache/poi/xssf/usermodel/ testcases/org/apache/poi/ss/usermodel/

Author: yegor
Date: Sat Sep  4 15:56:29 2010
New Revision: 992629

URL: http://svn.apache.org/viewvc?rev=992629&view=rev
Log:
fixed  XSSFWorkbook.createSheet to throw exception if sheet name begins or ends with a single quote ('), see Bugzilla 49875

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

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=992629&r1=992628&r2=992629&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sat Sep  4 15:56:29 2010
@@ -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>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java?rev=992629&r1=992628&r2=992629&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/BoundSheetRecord.java Sat Sep  4 15:56:29 2010
@@ -26,6 +26,7 @@ import org.apache.poi.util.BitFieldFacto
 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 exte
 	 */
 	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
 	 *

Modified: poi/trunk/src/java/org/apache/poi/ss/util/WorkbookUtil.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/util/WorkbookUtil.java?rev=992629&r1=992628&r2=992629&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/util/WorkbookUtil.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/util/WorkbookUtil.java Sat Sep  4 15:56:29 2010
@@ -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 (').");
+        }
+    }
+
 }

Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java?rev=992629&r1=992628&r2=992629&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFWorkbook.java Sat Sep  4 15:56:29 2010
@@ -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 POIXML
     }
 
     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 POIXML
      * 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);
@@ -1233,56 +1233,6 @@ public class XSSFWorkbook extends POIXML
     }
 
     /**
-     * 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>
      * The default value is false, meaning that the workbook uses the 1900 date system,

Modified: poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java?rev=992629&r1=992628&r2=992629&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ss/usermodel/BaseTestWorkbook.java Sat Sep  4 15:56:29 2010
@@ -72,7 +72,8 @@ public abstract class BaseTestWorkbook e
 
         //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);



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