poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ser...@apache.org
Subject svn commit: r1383584 - in /poi/trunk: src/documentation/content/xdocs/ src/scratchpad/src/org/apache/poi/hwpf/model/types/ src/scratchpad/src/org/apache/poi/hwpf/sprm/ src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/ src/types/definitions/ test-...
Date Tue, 11 Sep 2012 19:49:45 GMT
Author: sergey
Date: Tue Sep 11 19:49:44 2012
New Revision: 1383584

URL: http://svn.apache.org/viewvc?rev=1383584&view=rev
Log:
Fixed bug 53380 -- ArrayIndexOutOfBounds Excetion parsing word 97 document
We had incorrect implementation for sprmCShd80 (0x4866) 0x66 processing, Shd was used instead
of Shd80

Added:
    poi/trunk/test-data/document/Bug53380_1.doc   (with props)
    poi/trunk/test-data/document/Bug53380_2.doc   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java
    poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java
    poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java
    poi/trunk/src/types/definitions/shd80_type.xml
    poi/trunk/src/types/definitions/shd_type.xml

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Sep 11 19:49:44 2012
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.9-beta1" date="2012-??-??">
+          <action dev="poi-developers" type="fix">53380 - ArrayIndexOutOfBounds Excetion
parsing word 97 document. </action>
           <action dev="poi-developers" type="fix">53434 - Subtotal is not return correct
value. </action>
           <action dev="poi-developers" type="fix">53642 - [PATCH] XLS formula evaluation
logging </action>
           <action dev="poi-developers" type="fix">53561 - Unexpected adding of drawings
into a workbook </action>

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java Tue
Sep 11 19:49:44 2012
@@ -14,17 +14,18 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
-package org.apache.poi.hwpf.model.types;
 
+package org.apache.poi.hwpf.model.types;
 
 import org.apache.poi.util.BitField;
 import org.apache.poi.util.Internal;
 import org.apache.poi.util.LittleEndian;
 
 /**
- * The SHD80 is a substructure of the CHP and PAP, and TC for Word 97. <p>Class
-        and fields descriptions are quoted from
-        Microsoft Office Word 97-2007 Binary File Format
+ * The Shd80 structure specifies the colors and pattern that are used for background
+        shading. As an exception to the constraints that are specified by Ico and Ipat, a
Shd80 can
+        be set to Shd80Nil and specifies that no shading is applied. <p>Class and fields
+        descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation
     
  * <p>
  * NOTE: This source is automatically generated please do not modify this file.  Either subclass
or
@@ -33,8 +34,7 @@ import org.apache.poi.util.LittleEndian;
  * This class is internal. It content or properties may change without notice 
  * due to changes in our knowledge of internal Microsoft Word binary structures.
 
- * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File Format
-        Specification [*.doc]
+ * @author Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft Corporation.
     
  */
 @Internal
@@ -42,9 +42,9 @@ public abstract class SHD80AbstractType
 {
 
     protected short field_1_value;
-    /**/private static BitField icoFore = new BitField(0x001F);
-    /**/private static BitField icoBack = new BitField(0x03E0);
-    /**/private static BitField ipat = new BitField(0xFC00);
+    /**/private static final BitField icoFore = new BitField(0x001F);
+    /**/private static final BitField icoBack = new BitField(0x03E0);
+    /**/private static final BitField ipat = new BitField(0xFC00);
 
     protected SHD80AbstractType()
     {
@@ -52,12 +52,19 @@ public abstract class SHD80AbstractType
 
     protected void fillFields( byte[] data, int offset )
     {
-        field_1_value                  = LittleEndian.getShort(data, 0x0 + offset);
+        field_1_value                  = LittleEndian.getShort( data, 0x0 + offset );
     }
 
     public void serialize( byte[] data, int offset )
     {
-        LittleEndian.putShort(data, 0x0 + offset, (short)field_1_value);
+        LittleEndian.putShort( data, 0x0 + offset, field_1_value );
+    }
+
+    public byte[] serialize()
+    {
+        final byte[] result = new byte[ getSize() ];
+        serialize( result, 0 );
+        return result;
     }
 
     /**
@@ -68,6 +75,30 @@ public abstract class SHD80AbstractType
         return 0 + 2;
     }
 
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        SHD80AbstractType other = (SHD80AbstractType) obj;
+        if ( field_1_value != other.field_1_value )
+            return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + field_1_value;
+        return result;
+    }
+
     public String toString()
     {
         StringBuilder builder = new StringBuilder();

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java Tue
Sep 11 19:49:44 2012
@@ -14,6 +14,7 @@
    See the License for the specific language governing permissions and
    limitations under the License.
 ==================================================================== */
+
 package org.apache.poi.hwpf.model.types;
 
 
@@ -22,9 +23,9 @@ import org.apache.poi.util.Internal;
 import org.apache.poi.util.LittleEndian;
 
 /**
- * The SHD is a substructure of the CHP, PAP, and TC for Word 2000. <p>Class
+ * The Shd structure specifies the colors and pattern that are used for background shading.
<p>Class
         and
-        fields descriptions are quoted from Microsoft Office Word 97-2007 Binary File Format
+        fields descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation
     
  * <p>
  * NOTE: This source is automatically generated please do not modify this file.  Either subclass
or
@@ -33,8 +34,7 @@ import org.apache.poi.util.LittleEndian;
  * This class is internal. It content or properties may change without notice 
  * due to changes in our knowledge of internal Microsoft Word binary structures.
 
- * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File Format
-        Specification [*.doc]
+ * @author Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft Corporation.
     
  */
 @Internal
@@ -53,16 +53,23 @@ public abstract class SHDAbstractType
 
     protected void fillFields( byte[] data, int offset )
     {
-        field_1_cvFore                 = new Colorref(data, 0x0 + offset);
-        field_2_cvBack                 = new Colorref(data, 0x4 + offset);
-        field_3_ipat                   = LittleEndian.getShort(data, 0x8 + offset);
+        field_1_cvFore                 = new Colorref( data, 0x0 + offset );
+        field_2_cvBack                 = new Colorref( data, 0x4 + offset );
+        field_3_ipat                   = LittleEndian.getShort( data, 0x8 + offset );
     }
 
     public void serialize( byte[] data, int offset )
     {
-        field_1_cvFore.serialize(data, 0x0 + offset);
-        field_2_cvBack.serialize(data, 0x4 + offset);
-        LittleEndian.putShort(data, 0x8 + offset, (short)field_3_ipat);
+        field_1_cvFore.serialize( data, 0x0 + offset );
+        field_2_cvBack.serialize( data, 0x4 + offset );
+        LittleEndian.putUShort( data, 0x8 + offset, field_3_ipat );
+    }
+
+    public byte[] serialize()
+    {
+        final byte[] result = new byte[ getSize() ];
+        serialize( result, 0 );
+        return result;
     }
 
     /**
@@ -73,6 +80,36 @@ public abstract class SHDAbstractType
         return 0 + 4 + 4 + 2;
     }
 
+    @Override
+    public boolean equals( Object obj )
+    {
+        if ( this == obj )
+            return true;
+        if ( obj == null )
+            return false;
+        if ( getClass() != obj.getClass() )
+            return false;
+        SHDAbstractType other = (SHDAbstractType) obj;
+        if ( field_1_cvFore != other.field_1_cvFore )
+            return false;
+        if ( field_2_cvBack != other.field_2_cvBack )
+            return false;
+        if ( field_3_ipat != other.field_3_ipat )
+            return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode()
+    {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + field_1_cvFore.hashCode();
+        result = prime * result + field_2_cvBack.hashCode();
+        result = prime * result + field_3_ipat;
+        return result;
+    }
+
     public String toString()
     {
         StringBuilder builder = new StringBuilder();
@@ -89,7 +126,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * 24-bit foreground color.
+     * A COLORREF that specifies the foreground color of ipat.
      */
     @Internal
     public Colorref getCvFore()
@@ -98,7 +135,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * 24-bit foreground color.
+     * A COLORREF that specifies the foreground color of ipat.
      */
     @Internal
     public void setCvFore( Colorref field_1_cvFore )
@@ -107,7 +144,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * 24-bit background color.
+     * A COLORREF that specifies the background color of ipat.
      */
     @Internal
     public Colorref getCvBack()
@@ -116,7 +153,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * 24-bit background color.
+     * A COLORREF that specifies the background color of ipat.
      */
     @Internal
     public void setCvBack( Colorref field_2_cvBack )
@@ -125,7 +162,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * Shading pattern.
+     * An Ipat that specifies the pattern used for shading.
      */
     @Internal
     public int getIpat()
@@ -134,7 +171,7 @@ public abstract class SHDAbstractType
     }
 
     /**
-     * Shading pattern.
+     * An Ipat that specifies the pattern used for shading.
      */
     @Internal
     public void setIpat( int field_3_ipat )

Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hwpf/sprm/CharacterSprmUncompressor.java Tue
Sep 11 19:49:44 2012
@@ -17,6 +17,8 @@
 
 package org.apache.poi.hwpf.sprm;
 
+import org.apache.poi.hwpf.usermodel.ShadingDescriptor80;
+
 import org.apache.poi.hwpf.model.Colorref;
 import org.apache.poi.hwpf.model.Hyphenation;
 import org.apache.poi.hwpf.usermodel.BorderCode;
@@ -578,9 +580,20 @@ public final class CharacterSprmUncompre
       case 0x65:
         newCHP.setBrc (new BorderCode(sprm.getGrpprl(), sprm.getGrpprlOffset()));
         break;
-      case 0x66:
-        newCHP.setShd (new ShadingDescriptor(sprm.getGrpprl(), sprm.getGrpprlOffset()));
-        break;
+        case 0x66:
+            // sprmCShd80
+            /*
+             * "A Shd80 structure that specifies the background shading for the text. By
default, text is not shaded."
+             * 
+             * Word (.doc) Binary File Format. Copyright (c) 2011 Microsoft
+             * Corporation. Release: Tuesday, March 15, 2011
+             */
+            ShadingDescriptor80 oldDescriptor = new ShadingDescriptor80(
+                    sprm.getGrpprl(), sprm.getGrpprlOffset() );
+            ShadingDescriptor newDescriptor = oldDescriptor
+                    .toShadingDescriptor();
+            newCHP.setShd( newDescriptor );
+            break;
       case 0x67:
         // Obsolete
         break;

Modified: poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java (original)
+++ poi/trunk/src/scratchpad/testcases/org/apache/poi/hwpf/usermodel/TestBugs.java Tue Sep
11 19:49:44 2012
@@ -765,4 +765,20 @@ public class TestBugs extends TestCase
     {
         HWPFTestDataSamples.openSampleFile( "Bug52032_3.doc" );
     }
+
+    /**
+     * Bug 53380 - ArrayIndexOutOfBounds Excetion parsing word 97 document
+     */
+    public void testBug53380_1() throws Exception
+    {
+        HWPFTestDataSamples.openSampleFile( "Bug53380_1.doc" );
+    }
+
+    /**
+     * Bug 53380 - ArrayIndexOutOfBounds Excetion parsing word 97 document
+     */
+    public void testBug53380_2() throws Exception
+    {
+        HWPFTestDataSamples.openSampleFile( "Bug53380_2.doc" );
+    }
 }

Modified: poi/trunk/src/types/definitions/shd80_type.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/types/definitions/shd80_type.xml?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/types/definitions/shd80_type.xml (original)
+++ poi/trunk/src/types/definitions/shd80_type.xml Tue Sep 11 19:49:44 2012
@@ -19,17 +19,17 @@
 -->
 <record fromfile="true" name="SHD80" package="org.apache.poi.hwpf.model.types">
     <suffix>AbstractType</suffix>
-    <description>The SHD80 is a substructure of the CHP and PAP, and TC for Word 97.
&lt;p&gt;Class
-        and fields descriptions are quoted from
-        Microsoft Office Word 97-2007 Binary File Format
+    <description>The Shd80 structure specifies the colors and pattern that are used
for background
+        shading. As an exception to the constraints that are specified by Ico and Ipat, a
Shd80 can
+        be set to Shd80Nil and specifies that no shading is applied. &lt;p&gt;Class
and fields
+        descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation
     </description>
-    <author>Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File
Format
-        Specification [*.doc]
+    <author>Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft
Corporation.
     </author>
     <fields>
         <field type="short" size="2" name="value">
-            <bit number="1" mask="0x001F" name="icoFore" description="Foreground color"
/>
-            <bit number="2" mask="0x03E0" name="icoBack" description="Background color"
/>
+            <bit number="1" mask="0x001F" name="icoFore" description="Foreground color"/>
+            <bit number="2" mask="0x03E0" name="icoBack" description="Background color"/>
             <bit number="3" mask="0xFC00" name="ipat" description="Shading pattern"/>
         </field>
     </fields>

Modified: poi/trunk/src/types/definitions/shd_type.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/types/definitions/shd_type.xml?rev=1383584&r1=1383583&r2=1383584&view=diff
==============================================================================
--- poi/trunk/src/types/definitions/shd_type.xml (original)
+++ poi/trunk/src/types/definitions/shd_type.xml Tue Sep 11 19:49:44 2012
@@ -19,16 +19,15 @@
 -->
 <record fromfile="true" name="SHD" package="org.apache.poi.hwpf.model.types">
     <suffix>AbstractType</suffix>
-    <description>The SHD is a substructure of the CHP, PAP, and TC for Word 2000. &lt;p&gt;Class
+    <description>The Shd structure specifies the colors and pattern that are used for
background shading. &lt;p&gt;Class
         and
-        fields descriptions are quoted from Microsoft Office Word 97-2007 Binary File Format
+        fields descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation
     </description>
-    <author>Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File
Format
-        Specification [*.doc]
+    <author>Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft
Corporation.
     </author>
     <fields>
-        <field type="Colorref" size="4" name="cvFore" description="24-bit foreground color"/>
-        <field type="Colorref" size="4" name="cvBack" description="24-bit background color"/>
-        <field type="int" size="2" name="ipat" description="Shading pattern"/>
+        <field type="Colorref" size="4" name="cvFore" description="A COLORREF that specifies
the foreground color of ipat"/>
+        <field type="Colorref" size="4" name="cvBack" description="A COLORREF that specifies
the background color of ipat"/>
+        <field type="int" size="2" name="ipat" description="An Ipat that specifies the
pattern used for shading"/>
     </fields>
 </record>

Added: poi/trunk/test-data/document/Bug53380_1.doc
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/document/Bug53380_1.doc?rev=1383584&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/document/Bug53380_1.doc
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: poi/trunk/test-data/document/Bug53380_2.doc
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/document/Bug53380_2.doc?rev=1383584&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/document/Bug53380_2.doc
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message