From 4ca0b5535ffe681dd88bf0b36795e0e3fad4c468 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 4 Nov 2009 00:07:37 +0000 Subject: [PATCH] Patch from Trejkaz - fix bug #48038 - handle reading HWPF stylesheets from non zero offsets git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@832625 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../src/org/apache/poi/hwpf/model/StyleSheet.java | 3 ++- .../org/apache/poi/hwpf/model/TestStyleSheet.java | 15 +++++++++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 120f6dc709..7185c3e01d 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 48038 - handle reading HWPF stylesheets from non zero offsets When running the "compile-ooxml-xsds" ant task, also generate the source jar for the OOXML Schemas 45672 - improve handling by MissingRecordAwareHSSFListener of records that cover multiple cells (MulBlankRecord and MulRKRecord) 48096 - relaxed validation check in RecalcIdRecord diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java b/src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java index edb74eace6..647746d82e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java @@ -65,6 +65,7 @@ public final class StyleSheet implements HDFType { */ public StyleSheet(byte[] tableStream, int offset) { + int startOffset = offset; _stshiLength = LittleEndian.getShort(tableStream, offset); offset += LittleEndian.SHORT_SIZE; int stdCount = LittleEndian.getShort(tableStream, offset); @@ -88,7 +89,7 @@ public final class StyleSheet implements HDFType { _rgftc[2] = LittleEndian.getShort(tableStream, offset); offset += LittleEndian.SHORT_SIZE; - offset = (LittleEndian.SHORT_SIZE + _stshiLength); + offset = startOffset + LittleEndian.SHORT_SIZE + _stshiLength; _styleDescriptions = new StyleDescription[stdCount]; for(int x = 0; x < stdCount; x++) { diff --git a/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestStyleSheet.java b/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestStyleSheet.java index d092441e0d..8bae9aba08 100644 --- a/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestStyleSheet.java +++ b/src/scratchpad/testcases/org/apache/poi/hwpf/model/TestStyleSheet.java @@ -46,6 +46,21 @@ public final class TestStyleSheet } + public void testReadWriteFromNonZeroOffset() + throws Exception + { + HWPFFileSystem fileSys = new HWPFFileSystem(); + HWPFOutputStream tableOut = fileSys.getStream("1Table"); + + tableOut.write(new byte[20]); // 20 bytes of whatever at the front. + _styleSheet.writeTo(tableOut); + + byte[] newTableStream = tableOut.toByteArray(); + + StyleSheet newStyleSheet = new StyleSheet(newTableStream, 20); + assertEquals(newStyleSheet, _styleSheet); + } + protected void setUp() throws Exception { -- 2.39.5