]> source.dussan.org Git - poi.git/commitdiff
fix for 13921, sync from branch
authorAvik Sengupta <avik@apache.org>
Mon, 27 Oct 2003 02:01:21 +0000 (02:01 +0000)
committerAvik Sengupta <avik@apache.org>
Mon, 27 Oct 2003 02:01:21 +0000 (02:01 +0000)
git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353412 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/BoundSheetRecord.java
src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java
src/testcases/org/apache/poi/hssf/record/TestBoundSheetRecord.java
src/testcases/org/apache/poi/hssf/usermodel/TestCloneSheet.java

index ee3922c7a5967420187474c6a89ebe2a675b9d4d..f84b5baa906afd97698183efbaf5e1b9fcd591aa 100644 (file)
@@ -194,10 +194,22 @@ public class BoundSheetRecord
     /**
      * Set the sheetname for this sheet.  (this appears in the tabs at the bottom)
      * @param sheetname the name of the sheet
+     * @thows IllegalArgumentException if sheet name will cause excel to crash. 
      */
 
     public void setSheetname( String sheetname )
     {
+        
+        if ((sheetname == null) || (sheetname.length()==0)
+                || (sheetname.length()>31)
+                || (sheetname.indexOf("/") > -1)
+                || (sheetname.indexOf("\\") > -1)
+                || (sheetname.indexOf("?") > -1)
+                || (sheetname.indexOf("*") > -1)
+                || (sheetname.indexOf("]") > -1)
+                || (sheetname.indexOf("[") > -1) ){
+                    throw new IllegalArgumentException("Sheet name cannot be blank, greater than 31 chars, or contain any of /\\*?[]");
+        }
         field_5_sheetname = sheetname;
     }
 
index 8b8d7c274ba7a03bd619c8e440ccfc320ca1306f..799029b9b16cb33cf653982feebb7afe7f95288c 100644 (file)
@@ -270,7 +270,9 @@ public class HSSFWorkbook
     
      
     /**
-     * set the sheet name.
+     * set the sheet name. 
+     * Will throw IllegalArgumentException if the name is greater than 31 chars
+     * or contains /\?*[]
      * @param sheet number (0 based)
      * @param sheet name
      */
@@ -371,7 +373,11 @@ public class HSSFWorkbook
         windowTwo.setPaged(sheets.size() == 1);
 
         sheets.add(clonedSheet);
-        workbook.setSheetName(sheets.size()-1, srcName+"[1]");
+        if (srcName.length()<28) {
+            workbook.setSheetName(sheets.size()-1, srcName+"(2)");
+        }else {
+            workbook.setSheetName(sheets.size()-1,srcName.substring(0,28)+"(2)");
+        }
         return clonedSheet;
       }
       return null;
index 2058c2f9e1a85eaa1b203b27c8d121f156e686b2..4ca6075354003e9da47e885bde977b766a15fffd 100644 (file)
@@ -92,5 +92,25 @@ public class TestBoundSheetRecord
 
         assertEquals(" 2  +  2  +  4  +   2   +    1     +    1    + len(str) * 2", 24, record.getRecordSize());
     }
+    
+    public void testName() {
+        BoundSheetRecord record = new BoundSheetRecord();
+        record.setSheetname("1234567890223456789032345678904");
+        assertTrue("Success", true);
+        try {
+            record.setSheetname("12345678902234567890323456789042");
+            assertTrue("Should have thrown IllegalArgumentException, but didnt", false);
+        } catch (IllegalArgumentException e) {
+            assertTrue("succefully threw exception",true);
+        }
+        
+        try {
+            record.setSheetname("s//*s");
+            assertTrue("Should have thrown IllegalArgumentException, but didnt", false);
+        } catch (IllegalArgumentException e) {
+            assertTrue("succefully threw exception",true);
+        }
+            
+    }
 
 }
index 052516108c968dda9783bb2deeac625e244dcacd..6ccf29ec2719cccec5bf3ca502d69f2ebe8ed5c5 100644 (file)
@@ -79,7 +79,7 @@ public class TestCloneSheet extends TestCase {
                        s.addMergedRegion(new Region((short)0,(short)0,(short)1,(short)1));
                        b.cloneSheet(0);
                }
-               catch(Exception e){fail(e.getMessage());}
+               catch(Exception e){e.printStackTrace();fail(e.getMessage());}
        }
 
 }