]> source.dussan.org Git - poi.git/commitdiff
fixed [Bug 42677] - HSLF SlideShow write() issues on tables
authorYegor Kozlov <yegor@apache.org>
Tue, 26 Jun 2007 08:09:24 +0000 (08:09 +0000)
committerYegor Kozlov <yegor@apache.org>
Tue, 26 Jun 2007 08:09:24 +0000 (08:09 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@550731 13f79535-47bb-0310-9956-ffa450edef68

src/scratchpad/src/org/apache/poi/hslf/model/textproperties/TextPropCollection.java
src/scratchpad/testcases/org/apache/poi/hslf/record/TestStyleTextPropAtom.java

index 5732c342c99f8fe22f90cc1653eaea38bced7728..bcf4b997c428d63edae4a4c010e8b0d816eca231 100644 (file)
@@ -160,11 +160,15 @@ public class TextPropCollection {
                        StyleTextPropAtom.writeLittleEndian(reservedField,o);
                }
 
-               // The the mask field
+               // Then the mask field
                int mask = 0;
                for(int i=0; i<textPropList.size(); i++) {
                        TextProp textProp = (TextProp)textPropList.get(i);
-                       mask += textProp.getWriteMask();
+            //sometimes header indicates that the bitmask is present but its value is 0
+            if (textProp instanceof BitMaskTextProp)
+                mask |= (textProp.getWriteMask() == 0 ? 1 : textProp.getWriteMask());
+            else
+                mask |= textProp.getWriteMask();
                }
                StyleTextPropAtom.writeLittleEndian(mask,o);
 
index ce804ae9eac3c45b7fad81063f824313bbe015c4..7b1f614ee7e707be56a8ca972f9dc226b86f7c8d 100644 (file)
@@ -26,6 +26,7 @@ import org.apache.poi.hslf.model.textproperties.TextProp;
 import org.apache.poi.hslf.model.textproperties.TextPropCollection;
 import org.apache.poi.hslf.record.StyleTextPropAtom.*;
 import org.apache.poi.hslf.usermodel.SlideShow;
+import org.apache.poi.util.HexDump;
 
 import junit.framework.TestCase;
 import java.io.ByteArrayOutputStream;
@@ -734,4 +735,28 @@ public class TestStyleTextPropAtom extends TestCase {
         assertEquals(0, chprops.findByName("asian_or_complex").getValue());
         assertEquals(1, chprops.findByName("char_unknown_2").getValue());
     }
+
+    /**
+     * Check the test data for Bug 42677.
+     */
+     public void test42677() throws Exception {
+        int length = 18;
+        byte[] data = {0x00, 0x00, (byte)0xA1, 0x0F, 0x28, 0x00, 0x00, 0x00,
+                       0x13, 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , (byte)0xF1 , 0x20 , 0x00, 0x00 , 0x00 , 0x00 ,
+                       0x22 , 0x20 , 0x00 , 0x00 , 0x64 , 0x00 , 0x00 , 0x00 , 0x00 , (byte)0xFF ,
+                       0x00 , 0x00 , 0x13 , 0x00 , 0x00 , 0x00 , 0x00 , 0x00 , 0x63 , 0x00 ,
+                       0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x0F , 0x00
+        };
+        StyleTextPropAtom stpa = new StyleTextPropAtom(data,0,data.length);
+        stpa.setParentTextSize(length);
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        stpa.writeOut(baos);
+        byte[] b = baos.toByteArray();
+
+        assertEquals(data.length, b.length);
+        for(int i=0; i<data.length; i++) {
+            assertEquals(data[i],b[i]);
+        }
+
+    }
 }