From 286b682cdc9350855874f9966d0eb0ee569ca31a Mon Sep 17 00:00:00 2001 From: Maxim Valyanskiy Date: Mon, 27 Sep 2010 12:50:36 +0000 Subject: [PATCH] hwpt: add more 2 bytes to OldSectionTable to solve ArrayIndexOutOfBoundsException git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1001712 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/poi/hwpf/model/OldSectionTable.java | 4 ++-- .../poi/hwpf/extractor/TestWordExtractor.java | 12 +++++++++++- test-data/document/word95err.doc | Bin 0 -> 33280 bytes 3 files changed, 13 insertions(+), 3 deletions(-) create mode 100644 test-data/document/word95err.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 87218b35e..18819c32c 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java @@ -60,8 +60,8 @@ public final class OldSectionTable extends SectionTable // 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; + byte[] buf = new byte[sepxSize+4]; + fileOffset += 4; 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/extractor/TestWordExtractor.java b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java index 1ef21db3a..690345322 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/extractor/TestWordExtractor.java @@ -273,7 +273,17 @@ public final class TestWordExtractor extends TestCase { assertEquals("\r\n", tp[5]); assertEquals("Last (4th) paragraph.\r\n", tp[6]); } - + + public void testWord95err() throws Exception { + // Can work with the special one + Word6Extractor w6e = new Word6Extractor( + POIDataSamples.getDocumentInstance().openResourceAsStream("word95err.doc") + ); + String text = w6e.getText(); + + assertTrue(text.contains("subject")); + } + public void testWord6() throws Exception { // Too old for the default try { diff --git a/test-data/document/word95err.doc b/test-data/document/word95err.doc new file mode 100644 index 0000000000000000000000000000000000000000..7db961b6304001d16935f4dcd956ad8ae7472f4a GIT binary patch literal 33280 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 literal 0 HcmV?d00001