poi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From j...@apache.org
Subject svn commit: r832536 - in /poi/trunk/src: documentation/content/xdocs/status.xml java/org/apache/poi/hssf/record/RecalcIdRecord.java testcases/org/apache/poi/hssf/record/AllRecordTests.java testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java
Date Tue, 03 Nov 2009 20:23:22 GMT
Author: josh
Date: Tue Nov  3 20:23:21 2009
New Revision: 832536

URL: http://svn.apache.org/viewvc?rev=832536&view=rev
Log:
Bugzilla 48096 - relaxed validation check in RecalcIdRecord

Added:
    poi/trunk/src/testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.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=832536&r1=832535&r2=832536&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Nov  3 20:23:21 2009
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.6-beta1" date="2009-??-??">
+           <action dev="POI-DEVELOPERS" type="fix">48096 - relaxed validation check
in RecalcIdRecord</action>
            <action dev="POI-DEVELOPERS" type="fix">48085 - improved error checking
in BlockAllocationTableReader to trap unreasonable field values</action>
            <action dev="POI-DEVELOPERS" type="fix">47924 - fixed logic for matching
cells and comments in HSSFCell.getCellComment()</action>
            <action dev="POI-DEVELOPERS" type="add">47942 - added implementation of
protection features to XLSX and DOCX files</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java?rev=832536&r1=832535&r2=832536&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/RecalcIdRecord.java Tue Nov  3 20:23:21
2009
@@ -25,11 +25,8 @@
  * Description:  This record contains an ID that marks when a worksheet was last
  *               recalculated. It's an optimization Excel uses to determine if it
  *               needs to  recalculate the spreadsheet when it's opened. So far, only
- *               the two values <code>0xC1 0x01 0x00 0x00 0x80 0x38 0x01 0x00</code>
- *               (do not recalculate) and <code>0xC1 0x01 0x00 0x00 0x60 0x69 0x01
- *               0x00</code> have been seen. If the field <code>isNeeded</code>
is
- *               set to false (default), then this record is swallowed during the
- *               serialization process<p/>
+ *               the two engine ids <code>0x80 0x38 0x01 0x00</code> 
+ *               and <code>0x60 0x69 0x01 0x00</code> have been seen.<p/>
  * REFERENCE:  http://chicago.sourceforge.net/devel/docs/excel/biff8.html<p/>
  * @author Luc Girardin (luc dot girardin at macrofocus dot com)
  *
@@ -41,10 +38,7 @@
     private final int _engineId;
 
     public RecalcIdRecord(RecordInputStream in) {
-    	int rt = in.readUShort();
-    	if (rt != sid) {
-    		throw new RecordFormatException("expected " + sid + " but got " + rt);
-    	}
+    	in.readUShort(); // field 'rt' should have value 0x01C1, but Excel doesn't care during
reading
     	_reserved0 = in.readUShort();
     	_engineId = in.readInt();
     }
@@ -64,7 +58,7 @@
     }
 
     public void serialize(LittleEndianOutput out) {
-        out.writeShort(sid);
+        out.writeShort(sid); // always write 'rt' field as 0x01C1
         out.writeShort(_reserved0);
         out.writeInt(_engineId);
     }

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java?rev=832536&r1=832535&r2=832536&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/AllRecordTests.java Tue Nov  3 20:23:21
2009
@@ -69,6 +69,7 @@
 		result.addTestSuite(TestObjRecord.class);
 		result.addTestSuite(TestPaletteRecord.class);
 		result.addTestSuite(TestPaneRecord.class);
+		result.addTestSuite(TestRecalcIdRecord.class);
 		result.addTestSuite(TestRecordFactory.class);
 		result.addTestSuite(TestRecordFactoryInputStream.class);
 		result.addTestSuite(TestRecordInputStream.class);

Added: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java?rev=832536&view=auto
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java (added)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestRecalcIdRecord.java Tue Nov  3
20:23:21 2009
@@ -0,0 +1,72 @@
+/* ====================================================================
+   Licensed to the Apache Software Foundation (ASF) under one or more
+   contributor license agreements.  See the NOTICE file distributed with
+   this work for additional information regarding copyright ownership.
+   The ASF licenses this file to You under the Apache License, Version 2.0
+   (the "License"); you may not use this file except in compliance with
+   the License.  You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hssf.record;
+
+import java.util.Arrays;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+
+import org.apache.poi.util.HexRead;
+/**
+ *
+ * @author Josh Micich
+ */
+public final class TestRecalcIdRecord extends TestCase {
+
+	private static RecalcIdRecord create(byte[] data) {
+		RecordInputStream in = TestcaseRecordInputStream.create(RecalcIdRecord.sid, data);
+		RecalcIdRecord result = new RecalcIdRecord(in);
+		assertEquals(0, in.remaining());
+		return result;
+	}
+	public void testBasicDeserializeReserialize() {
+		
+		byte[] data = HexRead.readFromString(
+				"C1 01" +  // rt
+				"00 00" +  // reserved
+				"1D EB 01 00"); // engine id
+
+		RecalcIdRecord r = create(data);
+		TestcaseRecordInputStream.confirmRecordEncoding(RecalcIdRecord.sid, data, r.serialize());
+	}
+
+	public void testBadFirstField_bug48096() {
+		/**
+		 * Data taken from the sample file referenced in Bugzilla 48096, file offset 0x0D45.
+		 * The apparent problem is that the first data short field has been written with the
+		 * wrong <i>endianness</n>.  Excel seems to ignore whatever value is present
in this
+		 * field, and always rewrites it as (C1, 01). POI now does the same.
+		 */
+		byte[] badData  = HexRead.readFromString("C1 01 08 00 01 C1 00 00 00 01 69 61");
+		byte[] goodData = HexRead.readFromString("C1 01 08 00 C1 01 00 00 00 01 69 61");
+
+		RecordInputStream in = TestcaseRecordInputStream.create(badData);
+		RecalcIdRecord r;
+		try {
+			r = new RecalcIdRecord(in);
+		} catch (RecordFormatException e) {
+			if (e.getMessage().equals("expected 449 but got 49409")) {
+				throw new AssertionFailedError("Identified bug 48096");
+			}
+			throw e;
+		}
+		assertEquals(0, in.remaining());
+		assertTrue(Arrays.equals(r.serialize(), goodData));
+	}
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org


Mime
View raw message