]> source.dussan.org Git - poi.git/commitdiff
More fixes for bug #49933, workaround the fact that some word6/word95 SEPX entries...
authorNick Burch <nick@apache.org>
Sun, 19 Sep 2010 09:59:10 +0000 (09:59 +0000)
committerNick Burch <nick@apache.org>
Sun, 19 Sep 2010 09:59:10 +0000 (09:59 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@998621 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java
test-data/document/Word6_sections2.doc [new file with mode: 0644]

index d16edb16bed7192cbc1c43d555aec560d9ec111d..87218b35e5473cb3a89c238ffe3a565b7ac442de 100644 (file)
@@ -56,7 +56,11 @@ public final class OldSectionTable extends SectionTable
       {
         // The first short at the offset is the size of the grpprl.
         int sepxSize = LittleEndian.getShort(documentStream, fileOffset);
-        byte[] buf = new byte[sepxSize];
+        // Because we don't properly know about all the details of the old
+        //  section properties, and we're trying to decode them as if they
+        //  were the new ones, we sometimes "need" more data than we have.
+        // As a workaround, have a few extra 0 bytes on the end!
+        byte[] buf = new byte[sepxSize+2];
         fileOffset += LittleEndian.SHORT_SIZE;
         System.arraycopy(documentStream, fileOffset, buf, 0, buf.length);
         _sections.add(new SEPX(sed, startAt, endAt, charConv, buf));
index fc20c7157f5796ebdbc96463e4d9ee97a3aea99b..8eca387f0cabd84192ed1363f4aa29f21d2072b9 100644 (file)
@@ -119,4 +119,24 @@ public final class TestHWPFOldDocument extends HWPFTestCase {
       assertEquals("\u000c", doc.getRange().getParagraph(4).text()); // Section line?
       assertEquals("\r", doc.getRange().getParagraph(5).text());
    }
+   
+   /**
+    * Another word document with sections, this time with a 
+    *  few more section properties set on it
+    */
+   public void testWord6Sections2() throws Exception {
+      HWPFOldDocument doc = HWPFTestDataSamples.openOldSampleFile("Word6_sections2.doc");
+      
+      assertEquals(1, doc.getRange().numSections());
+      assertEquals(57, doc.getRange().numParagraphs());
+      
+      assertEquals(
+            "\r",
+            doc.getRange().getParagraph(0).text()
+      );
+      assertEquals(
+            "STATEMENT  OF  INSOLVENCY  PRACTICE  10  (SCOTLAND)\r",
+            doc.getRange().getParagraph(1).text()
+      );
+   }
 }
diff --git a/test-data/document/Word6_sections2.doc b/test-data/document/Word6_sections2.doc
new file mode 100644 (file)
index 0000000..d07da5b
Binary files /dev/null and b/test-data/document/Word6_sections2.doc differ