]> source.dussan.org Git - poi.git/commitdiff
temporary(?) workaround for Bug 49933 - Word 6/95 documents with sections cause Array...
authorSergey Vladimirov <sergey@apache.org>
Sat, 9 Jul 2011 15:33:41 +0000 (15:33 +0000)
committerSergey Vladimirov <sergey@apache.org>
Sat, 9 Jul 2011 15:33:41 +0000 (15:33 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1144683 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hwpf/model/SEPX.java
src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestProblems.java

index b6ae393d67a501cca651e26cd0ca350ee7b3fb70..60e7d70af54685d778bf586b45b4bb9cd71aabba 100644 (file)
@@ -19,45 +19,59 @@ package org.apache.poi.hwpf.model;
 
 import org.apache.poi.hwpf.sprm.SectionSprmCompressor;
 import org.apache.poi.hwpf.sprm.SectionSprmUncompressor;
+import org.apache.poi.hwpf.sprm.SprmBuffer;
 import org.apache.poi.hwpf.usermodel.SectionProperties;
 
-/**
- */
 public final class SEPX extends BytePropertyNode<SEPX>
 {
 
-  SectionDescriptor _sed;
+    SectionProperties sectionProperties;
 
-  public SEPX(SectionDescriptor sed, int start, int end, CharIndexTranslator translator, byte[] grpprl)
-  {
-    super(start, end, translator, SectionSprmUncompressor.uncompressSEP(grpprl, 0));
-    _sed = sed;
-  }
+    SectionDescriptor _sed;
 
-  public byte[] getGrpprl()
-  {
-    return SectionSprmCompressor.compressSectionProperty((SectionProperties)_buf);
-  }
+    public SEPX( SectionDescriptor sed, int start, int end,
+            CharIndexTranslator translator, byte[] grpprl )
+    {
+        super( start, end, translator, new SprmBuffer( grpprl ) );
+        _sed = sed;
+    }
+
+    public byte[] getGrpprl()
+    {
+        if ( sectionProperties != null )
+        {
+            byte[] grpprl = SectionSprmCompressor
+                    .compressSectionProperty( sectionProperties );
+            _buf = new SprmBuffer( grpprl );
+        }
+
+        return ( (SprmBuffer) _buf ).toByteArray();
+    }
 
-  public SectionDescriptor getSectionDescriptor()
-  {
-    return _sed;
-  }
+    public SectionDescriptor getSectionDescriptor()
+    {
+        return _sed;
+    }
 
-  public SectionProperties getSectionProperties()
-  {
-    return (SectionProperties)_buf;
-  }
+    public SectionProperties getSectionProperties()
+    {
+        if ( sectionProperties == null )
+        {
+            sectionProperties = SectionSprmUncompressor.uncompressSEP(
+                    ( (SprmBuffer) _buf ).toByteArray(), 0 );
+        }
+        return sectionProperties;
+    }
 
-  public boolean equals(Object o)
-  {
-    SEPX sepx = (SEPX)o;
-    if (super.equals(o))
+    public boolean equals( Object o )
     {
-      return sepx._sed.equals(_sed);
+        SEPX sepx = (SEPX) o;
+        if ( super.equals( o ) )
+        {
+            return sepx._sed.equals( _sed );
+        }
+        return false;
     }
-    return false;
-  }
 
     public String toString()
     {
index f52df00e7164cb7447315611c6046dd4ee316e06..387b3cb20fc18c3677fdfb0fecab9cdd9bbd7be7 100644 (file)
@@ -793,6 +793,11 @@ public final class TestProblems extends HWPFTestCase {
         }
     }
 
+    public void test49933()
+    {
+        HWPFTestDataSamples.openOldSampleFile( "Bug49933.doc" );
+    }
+
     /**
      * Bug 50936  - HWPF fails to read a file
      */