]> source.dussan.org Git - poi.git/commitdiff
Fix bug #45777 - Throw an exception if HSSF Footer or Header is attemped to be set...
authorNick Burch <nick@apache.org>
Sun, 21 Sep 2008 17:38:39 +0000 (17:38 +0000)
committerNick Burch <nick@apache.org>
Sun, 21 Sep 2008 17:38:39 +0000 (17:38 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@697559 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/changes.xml
src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/hssf/record/FooterRecord.java
src/java/org/apache/poi/hssf/record/HeaderRecord.java
src/java/org/apache/poi/hssf/usermodel/HSSFFooter.java
src/java/org/apache/poi/hssf/usermodel/HSSFHeader.java
src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java

index 4bcbce240cf544fa72099bc07ecc43fcea327a66..eb5ae733f39fea1a7f50b865519ebb0561e942f0 100644 (file)
@@ -37,6 +37,7 @@
 
                <!-- Don't forget to update status.xml too! -->
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out</action>
            <action dev="POI-DEVELOPERS" type="add">45844 - Addtional diagnostics for HSLF SlideShowRecordDumper</action>
            <action dev="POI-DEVELOPERS" type="fix">45829 - HSSFPicture.getImageDimension() failed when DPI of image is zero</action>
            <action dev="POI-DEVELOPERS" type="fix">45815 - Bit mask values in StyleTextPropAtom were not preserved across read-write</action>
index d78b3fe7b3b83b5c401f1dac722cf489fb93743f..1718ff841168205caf2e36a68862be55c2b99f66 100644 (file)
@@ -34,6 +34,7 @@
        <!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.2-alpha1" date="2008-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out</action>
            <action dev="POI-DEVELOPERS" type="add">45844 - Addtional diagnostics for HSLF SlideShowRecordDumper</action>
            <action dev="POI-DEVELOPERS" type="fix">45829 - HSSFPicture.getImageDimension() failed when DPI of image is zero</action>
            <action dev="POI-DEVELOPERS" type="fix">45815 - Bit mask values in StyleTextPropAtom were not preserved across read-write</action>
index 6a1aa8624bae6dff4c47a653098ccc4f9c399b3a..6ccc082801aa3d8b0153e20736a4e3d3b4a7247c 100644 (file)
@@ -118,6 +118,18 @@ public class FooterRecord
         field_4_footer = footer;
         field_3_unicode_flag = 
             (byte) (StringUtil.hasMultibyte(field_4_footer) ? 1 : 0);
+        // Check it'll fit into the space in the record
+        
+        if(field_4_footer == null) return;
+        if(field_3_unicode_flag == 1) {
+               if(field_4_footer.length() > 127) {
+                       throw new IllegalArgumentException("Footer string too long (limit is 127 for unicode strings)");
+               }
+        } else {
+               if(field_4_footer.length() > 255) {
+                       throw new IllegalArgumentException("Footer string too long (limit is 255 for non-unicode strings)");
+               }
+        }
     }
 
     /**
index cd584370281c71df1457fe1b4e8a732c07b7d083..e8190364a8f67a7f57d1288c89c98dbd66431f40 100644 (file)
@@ -117,6 +117,18 @@ public class HeaderRecord
         field_4_header = header;
         field_3_unicode_flag = 
             (byte) (StringUtil.hasMultibyte(field_4_header) ? 1 : 0);
+        
+        // Check it'll fit into the space in the record
+        if(field_4_header == null) return;
+        if(field_3_unicode_flag == 1) {
+               if(field_4_header.length() > 127) {
+                       throw new IllegalArgumentException("Header string too long (limit is 127 for unicode strings)");
+               }
+        } else {
+               if(field_4_header.length() > 255) {
+                       throw new IllegalArgumentException("Header string too long (limit is 255 for non-unicode strings)");
+               }
+        }
     }
 
     /**
index 10c779ffabacabd88a3aa482f62b2777d4d7d45d..6d895b9e493bf920e730373155f46f34b8e948ea 100644 (file)
@@ -70,6 +70,11 @@ public class HSSFFooter extends HeaderFooter {
        right = newRight;
        createFooterString();
     }
+    
+    protected String getRawFooter() {
+       return footerRecord.getFooter();
+    }
+
 
     /**
      * Creates the complete footer string based on the left, center, and middle
index 7b932f68213ca1f3416d889e591932c5a56bd327..82748b8bc8347808be175a303856bfd114f19272 100644 (file)
@@ -77,6 +77,10 @@ public class HSSFHeader extends HeaderFooter {
         right = newRight;
         createHeaderString();
     }
+    
+    protected String getRawHeader() {
+       return headerRecord.getHeader();
+    }
 
     /**
      * Creates the complete header string based on the left, center, and middle
index a4f9bbf18dbda7065ef839ae6c099450bd189703..4a43006997ae888ff61464d1952717706e406c3e 100644 (file)
@@ -1414,4 +1414,64 @@ public final class TestBugs extends TestCase {
         assertFalse(nwb.isSheetHidden(2));
         assertTrue(nwb.isSheetVeryHidden(2));
     }
+    
+    /**
+     * header / footer text too long
+     */
+    public void test45777() {
+       HSSFWorkbook wb = new HSSFWorkbook();
+       HSSFSheet s = wb.createSheet();
+       
+       String s248 = "";
+       for(int i=0; i<248; i++) {
+               s248 += "x";
+       }
+       String s249 = s248 + "1";
+       String s250 = s248 + "12";
+       String s251 = s248 + "123";
+       assertEquals(248, s248.length());
+       assertEquals(249, s249.length());
+       assertEquals(250, s250.length());
+       assertEquals(251, s251.length());
+       
+       
+       // Try on headers
+       s.getHeader().setCenter(s248);
+       assertEquals(254, s.getHeader().getRawHeader().length());
+       writeOutAndReadBack(wb);
+       
+       s.getHeader().setCenter(s249);
+       assertEquals(255, s.getHeader().getRawHeader().length());
+       writeOutAndReadBack(wb);
+       
+       try {
+               s.getHeader().setCenter(s250); // 256
+               fail();
+       } catch(IllegalArgumentException e) {}
+       
+       try {
+               s.getHeader().setCenter(s251); // 257
+               fail();
+       } catch(IllegalArgumentException e) {}
+       
+       
+       // Now try on footers
+       s.getFooter().setCenter(s248);
+       assertEquals(254, s.getFooter().getRawFooter().length());
+       writeOutAndReadBack(wb);
+       
+       s.getFooter().setCenter(s249);
+       assertEquals(255, s.getFooter().getRawFooter().length());
+       writeOutAndReadBack(wb);
+       
+       try {
+               s.getFooter().setCenter(s250); // 256
+               fail();
+       } catch(IllegalArgumentException e) {}
+       
+       try {
+               s.getFooter().setCenter(s251); // 257
+               fail();
+       } catch(IllegalArgumentException e) {}
+    }
 }