From 8043f38bd7b0dd0382ac7a0d1eb7995a7a0c8dd5 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sun, 19 Sep 2010 09:59:10 +0000 Subject: [PATCH] More fixes for bug #49933, workaround the fact that some word6/word95 SEPX entries are compressed differently, and we don't have the specs for how they're stored git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@998621 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hwpf/model/OldSectionTable.java | 6 +++++- .../hwpf/usermodel/TestHWPFOldDocument.java | 20 ++++++++++++++++++ test-data/document/Word6_sections2.doc | Bin 0 -> 15360 bytes 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 test-data/document/Word6_sections2.doc diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java index d16edb16b..87218b35e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java @@ -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)); diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java index fc20c7157..8eca387f0 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestHWPFOldDocument.java @@ -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 index 0000000000000000000000000000000000000000..d07da5bc1c763521ed60b3b721e593af3f988978 GIT binary patch literal 15360 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 literal 0 HcmV?d00001