]> source.dussan.org Git - poi.git/commitdiff
Merged revisions 697559 via svnmerge from
authorNick Burch <nick@apache.org>
Tue, 23 Sep 2008 17:18:57 +0000 (17:18 +0000)
committerNick Burch <nick@apache.org>
Tue, 23 Sep 2008 17:18:57 +0000 (17:18 +0000)
https://svn.apache.org/repos/asf/poi/trunk

........
  r697559 | nick | 2008-09-21 18:38:39 +0100 (Sun, 21 Sep 2008) | 1 line

  Fix bug #45777 - Throw an exception if HSSF Footer or Header is attemped to be set too long, rather than having it break during writing out
........

git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@698250 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 721f2559c24e6d3c99b71bd2a5d952af4280f3f3..8776750d617cd678f549f5eda02fa78f72540174 100644 (file)
@@ -67,6 +67,7 @@
            <action dev="POI-DEVELOPERS" type="add">Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx</action>
         </release>
         <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 b93115bd6b4e3a2e64173a3af8f9662c0692e931..2eaea06facb2c89f1ccf694ac39251e7ecaf51be 100644 (file)
@@ -64,6 +64,7 @@
            <action dev="POI-DEVELOPERS" type="add">Created a common interface for handling Excel files, irrespective of if they are .xls or .xlsx</action>
         </release>
         <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 4b84dd2f1af5e852a5be3c02036bd5ccc6a1f0f2..422af62c7f2874e88fa8fdcc18e25176f0f6925a 100644 (file)
@@ -71,6 +71,11 @@ public class HSSFFooter extends HeaderFooter implements Footer {
        right = newRight;
        createFooterString();
     }
+    
+    protected String getRawFooter() {
+       return footerRecord.getFooter();
+    }
+
 
     /**
      * Creates the complete footer string based on the left, center, and middle
index 76bfdbd86b40667f910260a381435c6de45843b6..c5247525a17a98ffbe64891a49209c1d96910037 100644 (file)
@@ -78,6 +78,10 @@ public class HSSFHeader extends HeaderFooter implements Header {
         right = newRight;
         createHeaderString();
     }
+    
+    protected String getRawHeader() {
+       return headerRecord.getHeader();
+    }
 
     /**
      * Creates the complete header string based on the left, center, and middle
index e62795f56aa0e31acec834723f09550b851f6785..378b993d091b02945f1ae4fda80a12db756b64c5 100644 (file)
@@ -1416,4 +1416,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) {}
+    }
 }