]> source.dussan.org Git - poi.git/commitdiff
Patch from Trejkaz - fix bug #48038 - handle reading HWPF stylesheets from non zero...
authorNick Burch <nick@apache.org>
Wed, 4 Nov 2009 00:07:37 +0000 (00:07 +0000)
committerNick Burch <nick@apache.org>
Wed, 4 Nov 2009 00:07:37 +0000 (00:07 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@832625 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/scratchpad/src/org/apache/poi/hwpf/model/StyleSheet.java
src/scratchpad/testcases/org/apache/poi/hwpf/model/TestStyleSheet.java

index 120f6dc709559c15fc15b1e2dab2ba1456e5f9fb..7185c3e01d3975ca96ce7ce9359cb0503eeb558d 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.6-beta1" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">48038 - handle reading HWPF stylesheets from non zero offsets</action>
            <action dev="POI-DEVELOPERS" type="add">When running the "compile-ooxml-xsds" ant task, also generate the source jar for the OOXML Schemas</action>
            <action dev="POI-DEVELOPERS" type="fix">45672 - improve handling by MissingRecordAwareHSSFListener of records that cover multiple cells (MulBlankRecord and MulRKRecord)</action>
            <action dev="POI-DEVELOPERS" type="fix">48096 - relaxed validation check in RecalcIdRecord</action>
index edb74eace69c6e70f3337289880d88233eade031..647746d82ee7bc8123dea5f0209b78b41f3e63ae 100644 (file)
@@ -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++)
       {
index d092441e0de42209cb9a52ed094a96eccfa1cccd..8bae9aba08713e6ee144fa9deb5ed9f9a2afd49e 100644 (file)
@@ -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
   {