You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2015/06/24 01:06:23 UTC

svn commit: r1687146 - in /poi: site/src/documentation/content/xdocs/status.xml trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java

Author: kiwiwings
Date: Tue Jun 23 23:06:23 2015
New Revision: 1687146

URL: http://svn.apache.org/r1687146
Log:
Bug 58069 - Biff8RC4 xorShort returns wrong value for unsigned shorts

Modified:
    poi/site/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java
    poi/trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java

Modified: poi/site/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/site/src/documentation/content/xdocs/status.xml?rev=1687146&r1=1687145&r2=1687146&view=diff
==============================================================================
--- poi/site/src/documentation/content/xdocs/status.xml (original)
+++ poi/site/src/documentation/content/xdocs/status.xml Tue Jun 23 23:06:23 2015
@@ -39,6 +39,7 @@
     </devs>
 
     <release version="3.13-beta1" date="2015-??-??">
+        <action dev="PD" type="fix" fixes-bug="58069">Biff8RC4 xorShort returns wrong value for unsigned shorts</action>
         <action dev="PD" type="fix" fixes-bug="56420">Fix possible NullPointerException when empty cell is included in Sumif calculation</action>
         <action dev="PD" type="fix" fixes-bug="58040">Log Forging</action>
         <action dev="DN" type="fix" fixes-bug="56328">Improve AreaReference to take account of the spreadsheet format version when determining whether a reference is whole-column.</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java?rev=1687146&r1=1687145&r2=1687146&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/crypto/Biff8DecryptingStream.java Tue Jun 23 23:06:23 2015
@@ -95,7 +95,7 @@ public final class Biff8DecryptingStream
 
 
 	public int readUByte() {
-		return _cipher.xorByte(_le.readUByte());
+		return readByte() & 0xFF;
 	}
 	public byte readByte() {
 		return (byte) _cipher.xorByte(_le.readUByte());
@@ -103,7 +103,7 @@ public final class Biff8DecryptingStream
 
 
 	public int readUShort() {
-		return _cipher.xorShort(_le.readUShort());
+		return readShort() & 0xFFFF;
 	}
 	public short readShort() {
 		return (short) _cipher.xorShort(_le.readUShort());

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java?rev=1687146&r1=1687145&r2=1687146&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/crypto/TestBiff8DecryptingStream.java Tue Jun 23 23:06:23 2015
@@ -96,9 +96,21 @@ public final class TestBiff8DecryptingSt
 		}
 
 		public void confirmShort(int expVal) {
-			cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readUShort()));
+			cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readShort()));
 		}
 
+        public void confirmUShort(int expVal) {
+            cmp(HexDump.shortToHex(expVal), HexDump.shortToHex(_bds.readUShort()));
+        }
+        
+        public short readShort() {
+            return _bds.readShort();
+        }
+
+        public int readUShort() {
+            return _bds.readUShort();
+        }
+
 		public void confirmInt(int expVal) {
 			cmp(HexDump.intToHex(expVal), HexDump.intToHex(_bds.readInt()));
 		}
@@ -106,7 +118,7 @@ public final class TestBiff8DecryptingSt
 		public void confirmLong(long expVal) {
 			cmp(HexDump.longToHex(expVal), HexDump.longToHex(_bds.readLong()));
 		}
-
+		
 		private void cmp(char[] exp, char[] act) {
 			if (Arrays.equals(exp, act)) {
 				return;
@@ -166,6 +178,15 @@ public final class TestBiff8DecryptingSt
 		st.rollForward(0x0C04, 0x0FF8);
 		st.confirmLong(0x6AA2D5F6B975D10CL);
 		st.confirmLong(0x34248ADF7ED4F029L);
+		// check for signed/unsigned shorts #58069
+		st.rollForward(0x1008, 0x7213);
+		st.confirmUShort(0xFFFF);
+		st.rollForward(0x7215, 0x1B9AD);
+        st.confirmShort(-1);
+        st.rollForward(0x1B9AF, 0x37D99);
+        assertEquals(0xFFFF, st.readUShort());
+        st.rollForward(0x37D9B, 0x4A6F2);
+        assertEquals(-1, st.readShort());
 		st.assertNoErrors();
 	}
 
@@ -229,7 +250,7 @@ public final class TestBiff8DecryptingSt
 		st.confirmData("01 C2 4E 55");  // first 4 bytes in next block
 		st.assertNoErrors();
 	}
-    
+
 	private static StreamTester createStreamTester(int mockStreamStartVal, String keyDigestHex, int expectedFirstInt) {
 		return new StreamTester(new MockStream(mockStreamStartVal), keyDigestHex, expectedFirstInt);
 	}



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