You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/04/27 20:02:30 UTC

svn commit: r651992 - in /poi/trunk: ./ src/documentation/content/xdocs/ src/java/org/apache/poi/ddf/ src/testcases/org/apache/poi/ddf/ src/testcases/org/apache/poi/ddf/data/

Author: nick
Date: Sun Apr 27 11:02:13 2008
New Revision: 651992

URL: http://svn.apache.org/viewvc?rev=651992&view=rev
Log:
Fix from Trejkaz from bug #44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect

Added:
    poi/trunk/src/testcases/org/apache/poi/ddf/data/
    poi/trunk/src/testcases/org/apache/poi/ddf/data/Container.dat   (with props)
Modified:
    poi/trunk/build.xml
    poi/trunk/src/documentation/content/xdocs/changes.xml
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/ddf/EscherMetafileBlip.java
    poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java

Modified: poi/trunk/build.xml
URL: http://svn.apache.org/viewvc/poi/trunk/build.xml?rev=651992&r1=651991&r2=651992&view=diff
==============================================================================
--- poi/trunk/build.xml (original)
+++ poi/trunk/build.xml Sun Apr 27 11:02:13 2008
@@ -401,6 +401,8 @@
         file="${main.src.test}/org/apache/poi/hpsf/data"/> 
       <sysproperty key="POIFS.testdata.path"
         file="${main.src.test}/org/apache/poi/poifs/data"/> 
+      <sysproperty key="DDF.testdata.path"
+        file="${main.src.test}/org/apache/poi/ddf/data"/> 
       <sysproperty key="java.awt.headless" value="true"/>
       <formatter type="plain"/>
       <formatter type="xml"/>

Modified: poi/trunk/src/documentation/content/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/changes.xml?rev=651992&r1=651991&r2=651992&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/changes.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/changes.xml Sun Apr 27 11:02:13 2008
@@ -37,6 +37,7 @@
 
 		<!-- Don't forget to update status.xml too! -->
         <release version="3.1-beta1" date="2008-04-??">
+           <action dev="POI-DEVELOPERS" type="fix">44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting embedded sounds from slide show </action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Initial support for rendering slides into images</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting OLE object data from slide show </action>

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=651992&r1=651991&r2=651992&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Sun Apr 27 11:02:13 2008
@@ -34,6 +34,7 @@
 	<!-- Don't forget to update changes.xml too! -->
     <changes>
         <release version="3.1-beta1" date="2008-04-??">
+           <action dev="POI-DEVELOPERS" type="fix">44857 - Avoid OOM on unknown escher records when EscherMetafileBlip is incorrect</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting embedded sounds from slide show </action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Initial support for rendering slides into images</action>
            <action dev="POI-DEVELOPERS" type="add">HSLF: Support for getting OLE object data from slide show </action>

Modified: poi/trunk/src/java/org/apache/poi/ddf/EscherMetafileBlip.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/EscherMetafileBlip.java?rev=651992&r1=651991&r2=651992&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ddf/EscherMetafileBlip.java (original)
+++ poi/trunk/src/java/org/apache/poi/ddf/EscherMetafileBlip.java Sun Apr 27 11:02:13 2008
@@ -83,8 +83,11 @@
         field_6_fCompression = data[pos]; pos++;
         field_7_fFilter = data[pos]; pos++;
 
-        raw_pictureData = new byte[field_5_cbSave];
-        System.arraycopy( data, pos, raw_pictureData, 0, field_5_cbSave );
+        // Bit of a snag - trusting field_5_cbSave results in inconsistent
+        //  record size in some cases. So, just check the data left
+        int remainingBytes = bytesAfterHeader - 50;
+        raw_pictureData = new byte[remainingBytes];
+        System.arraycopy( data, pos, raw_pictureData, 0, remainingBytes );
 
         // 0 means DEFLATE compression
         // 0xFE means no compression

Modified: poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java?rev=651992&r1=651991&r2=651992&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ddf/TestEscherContainerRecord.java Sun Apr 27 11:02:13 2008
@@ -18,13 +18,24 @@
         
 package org.apache.poi.ddf;
 
+import java.io.File;
+import java.io.FileInputStream;
+
 import junit.framework.TestCase;
 import org.apache.poi.util.HexRead;
 import org.apache.poi.util.HexDump;
+import org.apache.poi.util.IOUtils;
 
 public class TestEscherContainerRecord extends TestCase
 {
-    public void testFillFields() throws Exception
+	private String ESCHER_DATA_PATH;
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		ESCHER_DATA_PATH = System.getProperty("DDF.testdata.path");
+	}
+
+	public void testFillFields() throws Exception
     {
         EscherRecordFactory f = new DefaultEscherRecordFactory();
         byte[] data = HexRead.readFromString( "0F 02 11 F1 00 00 00 00" );
@@ -137,4 +148,19 @@
         assertEquals(18, r.getRecordSize());
     }
 
+    /**
+     * We were having problems with reading too much data on an UnknownEscherRecord,
+     *  but hopefully we now read the correct size.
+     */
+    public void testBug44857() throws Exception {
+    	File f = new File(ESCHER_DATA_PATH, "Container.dat");
+    	assertTrue(f.exists());
+    	
+    	FileInputStream finp = new FileInputStream(f);
+    	byte[] data = IOUtils.toByteArray(finp);
+    	
+    	// This used to fail with an OutOfMemory
+    	EscherContainerRecord record = new EscherContainerRecord();
+    	record.fillFields(data, 0, new DefaultEscherRecordFactory());
+    }
 }

Added: poi/trunk/src/testcases/org/apache/poi/ddf/data/Container.dat
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ddf/data/Container.dat?rev=651992&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/src/testcases/org/apache/poi/ddf/data/Container.dat
------------------------------------------------------------------------------
    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