You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ye...@apache.org on 2010/07/27 17:24:26 UTC
svn commit: r979747 - in /poi/trunk/src:
documentation/content/xdocs/status.xml
java/org/apache/poi/ddf/UnknownEscherRecord.java
testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java
Author: yegor
Date: Tue Jul 27 15:24:25 2010
New Revision: 979747
URL: http://svn.apache.org/viewvc?rev=979747&view=rev
Log:
prevent ArrayIndexOutOfBoundException in UnknowEscherRecord, see bug #49579
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java
poi/trunk/src/testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=979747&r1=979746&r2=979747&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Jul 27 15:24:25 2010
@@ -34,6 +34,7 @@
<changes>
<release version="3.7-beta2" date="2010-??-??">
+ <action dev="POI-DEVELOPERS" type="add">49579 - prevent ArrayIndexOutOfBoundException in UnknowEscherRecord</action>
<action dev="POI-DEVELOPERS" type="add">49593 - preserve leading and trailing white spaces in XWPFRun</action>
<action dev="POI-DEVELOPERS" type="add">49455 - Insert the content of fldSimple fields into the XWPFWordTextExtractor output</action>
<action dev="POI-DEVELOPERS" type="add">49640 - Fixed parsing formulas containing defined names beginning with an underscore</action>
Modified: poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java?rev=979747&r1=979746&r2=979747&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/ddf/UnknownEscherRecord.java Tue Jul 27 15:24:25 2010
@@ -28,6 +28,7 @@ import org.apache.poi.util.LittleEndian;
* we do not explicitly support.
*
* @author Glen Stampoultzis (glens at apache.org)
+ * @author Zhang Zhang (zhangzzh at gmail.com)
*/
public final class UnknownEscherRecord extends EscherRecord {
private static final byte[] NO_BYTES = new byte[0];
@@ -42,6 +43,17 @@ public final class UnknownEscherRecord e
public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) {
int bytesRemaining = readHeader( data, offset );
+ /*
+ * Modified by Zhang Zhang
+ * Have a check between avaliable bytes and bytesRemaining,
+ * take the avaliable length if the bytesRemaining out of range.
+ * July 09, 2010
+ */
+ int avaliable = data.length - (offset + 8);
+ if (bytesRemaining > avaliable) {
+ bytesRemaining = avaliable;
+ }
+
if (isContainerRecord()) {
int bytesWritten = 0;
thedata = new byte[0];
@@ -58,6 +70,7 @@ public final class UnknownEscherRecord e
}
return bytesWritten;
}
+
thedata = new byte[bytesRemaining];
System.arraycopy( data, offset + 8, thedata, 0, bytesRemaining );
return bytesRemaining + 8;
Modified: poi/trunk/src/testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java?rev=979747&r1=979746&r2=979747&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/ddf/TestUnknownEscherRecord.java Tue Jul 27 15:24:25 2010
@@ -76,7 +76,45 @@ public final class TestUnknownEscherReco
assertTrue( r.isContainerRecord() );
assertEquals( 1, r.getChildRecords().size() );
assertEquals( (short) 0xFFFF, r.getChild( 0 ).getRecordId() );
-
+
+ //Add by Zhang Zhang test error situation when remaining bytes > avalible bytes
+ testData =
+ "00 02 " + // options
+ "11 F1 " + // record id
+ "05 00 00 00 " + // remaining bytes
+ "01 02 03 04";
+
+ r = new UnknownEscherRecord();
+ r.fillFields( HexRead.readFromString( testData ), factory );
+
+ assertEquals( 0x0200, r.getOptions() );
+ assertEquals( (short) 0xF111, r.getRecordId() );
+ assertEquals( 12, r.getRecordSize() );
+ assertFalse( r.isContainerRecord() );
+ assertEquals( 0, r.getChildRecords().size() );
+ assertEquals( 4, r.getData().length );
+ assertEquals( 1, r.getData()[0] );
+ assertEquals( 2, r.getData()[1] );
+ assertEquals( 3, r.getData()[2] );
+ assertEquals( 4, r.getData()[3] );
+
+ testData =
+ "0F 02 " + // options
+ "11 F1 " + // record id
+ "09 00 00 00 " + // remaining bytes
+ "00 02 " + // options
+ "FF FF " + // record id
+ "00 00 00 00"; // remaining bytes
+
+ r = new UnknownEscherRecord();
+ r.fillFields( HexRead.readFromString( testData ), factory );
+
+ assertEquals( 0x020F, r.getOptions() );
+ assertEquals( (short) 0xF111, r.getRecordId() );
+ assertEquals( 8, r.getRecordSize() );
+ assertTrue( r.isContainerRecord() );
+ assertEquals( 1, r.getChildRecords().size() );
+ assertEquals( (short) 0xFFFF, r.getChild( 0 ).getRecordId() );
}
public void testSerialize() {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org