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 2009/11/25 13:11:05 UTC

svn commit: r884065 - in /poi/trunk: src/documentation/content/xdocs/ src/java/org/apache/poi/hssf/record/chart/ src/testcases/org/apache/poi/hssf/usermodel/ test-data/spreadsheet/

Author: nick
Date: Wed Nov 25 12:11:04 2009
New Revision: 884065

URL: http://svn.apache.org/viewvc?rev=884065&view=rev
Log:
Fix bug #48180 - short chart records skipping some unused fields

Added:
    poi/trunk/test-data/spreadsheet/48180.xls   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java
    poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.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=884065&r1=884064&r2=884065&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Wed Nov 25 12:11:04 2009
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.6-beta1" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">48180 - be more forgiving of short chart records, which skip some unused fields</action>
            <action dev="POI-DEVELOPERS" type="fix">48274 - fix erronious wrapping of byte colours in HSSFPalette.findSimilarColor</action>
            <action dev="POI-DEVELOPERS" type="fix">48269 - fix fetching of error codes from XSSF formula cells</action>
            <action dev="POI-DEVELOPERS" type="fix">48229 - fixed javadoc for  HSSFSheet.setColumnWidth and XSSFSheet setColumnWidth </action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java?rev=884065&r1=884064&r2=884065&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/CatLabRecord.java Wed Nov 25 12:11:04 2009
@@ -35,7 +35,7 @@
 	private short wOffset;
 	private short at;
 	private short grbit;
-	private short unused;
+	private Short unused;
 	
 	public CatLabRecord(RecordInputStream in) {
 		rt = in.readShort();
@@ -43,12 +43,18 @@
 		wOffset = in.readShort();
 		at = in.readShort();
 		grbit = in.readShort();
-		unused = in.readShort();
+		
+		// Often, but not always has an unused short at the end
+		if(in.available() == 0) {
+			unused = null;
+		} else {
+			unused = in.readShort();
+		}
 	}
 	
 	@Override
 	protected int getDataSize() {
-		return 2 + 2 + 2 + 2 + 2 + 2;
+		return 2 + 2 + 2 + 2 + 2 + (unused==null? 0:2);
 	}
 
 	@Override
@@ -58,13 +64,13 @@
 
 	@Override
 	public void serialize(LittleEndianOutput out) {
-		
 		out.writeShort(rt);
 		out.writeShort(grbitFrt);
 		out.writeShort(wOffset);
 		out.writeShort(at);
 		out.writeShort(grbit);
-		out.writeShort(unused);
+		if(unused != null)
+			out.writeShort(unused);
 	}
 
 	@Override

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.java?rev=884065&r1=884064&r2=884065&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/chart/ChartEndBlockRecord.java Wed Nov 25 12:11:04 2009
@@ -40,13 +40,18 @@
 		grbitFrt = in.readShort();
 		iObjectKind = in.readShort();
 
-		unused = new byte[6];
-		in.readFully(unused);
+		// Often, but not always has 6 unused bytes at the end
+		if(in.available() == 0) {
+			unused = new byte[0];
+		} else {
+			unused = new byte[6];
+			in.readFully(unused);
+		}
 	}
 
 	@Override
 	protected int getDataSize() {
-		return 2 + 2 + 2 + 6;
+		return 2 + 2 + 2 + unused.length;
 	}
 
 	@Override

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=884065&r1=884064&r2=884065&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 Wed Nov 25 12:11:04 2009
@@ -1509,4 +1509,17 @@
         assertEquals(32766, cell2.getStringCellValue().length());
     }
 
+    /**
+     * Short records on certain sheets with charts in them
+     */
+    public void test48180() {
+        HSSFWorkbook wb = openSample("48180.xls");
+        
+    	HSSFSheet s = wb.getSheetAt(0);
+        HSSFCell cell1 = s.getRow(0).getCell(0);
+        assertEquals("test ", cell1.getStringCellValue().toString());
+
+        HSSFCell cell2 = s.getRow(0).getCell(1);
+        assertEquals(1.0, cell2.getNumericCellValue());
+    }
 }

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

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