Author: bayard
Date: Tue Dec  5 16:23:18 2006
New Revision: 482841

URL: http://svn.apache.org/viewvc?view=rev&rev=482841
Log:
Committing my patch from #IO-101, fixing an <int> overrun in readSwappedLong. 
Many thanks to Jose Pinto for finding this

Modified:
    
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/EndianUtils.java
    
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/EndianUtilsTest.java

Modified: 
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/EndianUtils.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/EndianUtils.java?view=diff&rev=482841&r1=482840&r2=482841
==============================================================================
--- 
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/EndianUtils.java 
(original)
+++ 
jakarta/commons/proper/io/trunk/src/java/org/apache/commons/io/EndianUtils.java 
Tue Dec  5 16:23:18 2006
@@ -218,12 +218,12 @@
             ( ( data[ offset + 0 ] & 0xff ) << 0 ) +
             ( ( data[ offset + 1 ] & 0xff ) << 8 ) +
             ( ( data[ offset + 2 ] & 0xff ) << 16 ) +
-            ( ( data[ offset + 3 ] & 0xff ) << 24 );
+            ( ( (long) ( data[ offset + 3 ] & 0xff ) ) << 24 );
         long high = 
             ( ( data[ offset + 4 ] & 0xff ) << 0 ) +
             ( ( data[ offset + 5 ] & 0xff ) << 8 ) +
             ( ( data[ offset + 6 ] & 0xff ) << 16 ) +
-            ( ( data[ offset + 7 ] & 0xff ) << 24 );
+            ( ( (long) ( data[ offset + 7 ] & 0xff ) ) << 24 );
         return low + (high << 32);
     }
 

Modified: 
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/EndianUtilsTest.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/EndianUtilsTest.java?view=diff&rev=482841&r1=482840&r2=482841
==============================================================================
--- 
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/EndianUtilsTest.java
 (original)
+++ 
jakarta/commons/proper/io/trunk/src/test/org/apache/commons/io/EndianUtilsTest.java
 Tue Dec  5 16:23:18 2006
@@ -242,4 +242,25 @@
         assertEquals( 0x01, bytes[7] );
     }
 
+    // tests #IO-101
+    public void testSymmetryOfLong() throws IOException {
+
+        double[] tests = new double[] {34.345, -345.5645, 545.12, 10.043, 
7.123456789123};
+        for (int i = 0; i< tests.length ;i++) {
+
+            // testing the real problem
+            byte[] buffer = new byte[8];
+            long ln1 = Double.doubleToLongBits( tests[i] );
+            EndianUtils.writeSwappedLong(buffer, 0, ln1);
+            long ln2 = EndianUtils.readSwappedLong(buffer, 0);
+            assertEquals( ln1, ln2 );
+
+            // testing the bug report
+            buffer = new byte[8];
+            EndianUtils.writeSwappedDouble(buffer, 0, tests[i]);
+            double val = EndianUtils.readSwappedDouble(buffer, 0);
+            assertEquals( tests[i], val, 0 );
+        }
+    }
+
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to