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 2011/03/18 15:30:47 UTC

svn commit: r1082936 - in /poi/trunk: src/documentation/content/xdocs/status.xml src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java test-data/spreadsheet/50939.xls

Author: nick
Date: Fri Mar 18 14:30:47 2011
New Revision: 1082936

URL: http://svn.apache.org/viewvc?rev=1082936&view=rev
Log:
Fix bug #50939 - ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not

Added:
    poi/trunk/test-data/spreadsheet/50939.xls   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.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=1082936&r1=1082935&r2=1082936&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Fri Mar 18 14:30:47 2011
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta2" date="2011-??-??">
+           <action dev="poi-developers" type="fix">50939 - ChartEndObjectRecord is supposed to have 6 bytes at the end, but handle it not</action>
            <action dev="poi-developers" type="add">HMEF - New component which supports TNEF (Transport Neutral Encoding Format), aka winmail.dat</action>
            <action dev="poi-developers" type="fix">50313 - support for getting HWPFDocument fields</action>
            <action dev="poi-developers" type="fix">50912 - fixed setting named styles to HSSFCells</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java?rev=1082936&r1=1082935&r2=1082936&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndObjectRecord.java Fri Mar 18 14:30:47 2011
@@ -33,15 +33,23 @@ public final class ChartEndObjectRecord 
 	private short rt;
 	private short grbitFrt;
 	private short iObjectKind;
-	private byte[] unused;
+	private byte[] reserved;
 
 	public ChartEndObjectRecord(RecordInputStream in) {
 		rt = in.readShort();
 		grbitFrt = in.readShort();
 		iObjectKind = in.readShort();
 
-		unused = new byte[6];
-		in.readFully(unused);
+		// The spec says that there should be 6 bytes at the
+		//  end, which must be there and must be zero
+		// However, sometimes Excel forgets them...
+		reserved = new byte[6];
+		if(in.available() == 0) {
+		   // They've gone missing...
+		} else {
+		   // Read the reserved bytes 
+		   in.readFully(reserved);
+		}
 	}
 
 	@Override
@@ -60,7 +68,7 @@ public final class ChartEndObjectRecord 
 		out.writeShort(grbitFrt);
 		out.writeShort(iObjectKind);
 		// 6 bytes unused
-		out.write(unused);
+		out.write(reserved);
 	}
 
 	@Override
@@ -71,7 +79,7 @@ public final class ChartEndObjectRecord 
 		buffer.append("    .rt         =").append(HexDump.shortToHex(rt)).append('\n');
 		buffer.append("    .grbitFrt   =").append(HexDump.shortToHex(grbitFrt)).append('\n');
 		buffer.append("    .iObjectKind=").append(HexDump.shortToHex(iObjectKind)).append('\n');
-		buffer.append("    .unused     =").append(HexDump.toHex(unused)).append('\n');
+		buffer.append("    .reserved   =").append(HexDump.toHex(reserved)).append('\n');
 		buffer.append("[/ENDOBJECT]\n");
 		return buffer.toString();
 	}

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=1082936&r1=1082935&r2=1082936&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Fri Mar 18 14:30:47 2011
@@ -2028,4 +2028,12 @@ if(1==2) {
         writeOutAndReadBack(wb2);
     }
 
+    /**
+     * The spec says that ChartEndObjectRecord has 6 reserved
+     *  bytes on the end, but we sometimes find files without... 
+     */
+    public void test50939() throws Exception {
+       HSSFWorkbook wb = openSample("50939.xls");
+       assertEquals(2, wb.getNumberOfSheets());
+    }
 }

Added: poi/trunk/test-data/spreadsheet/50939.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/50939.xls?rev=1082936&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/50939.xls
------------------------------------------------------------------------------
    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