]> source.dussan.org Git - poi.git/commitdiff
Apply patch from bug #51458 - Correct BitField wrapping when setting large values
authorNick Burch <nick@apache.org>
Fri, 1 Jul 2011 16:29:04 +0000 (16:29 +0000)
committerNick Burch <nick@apache.org>
Fri, 1 Jul 2011 16:29:04 +0000 (16:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1141977 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/util/BitField.java
src/testcases/org/apache/poi/util/TestBitField.java

index 293ba59dc91c991e29c089473d34f9f85c8a9d7d..977491cce23d6e15f596917d0532268868d91ed8 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta4" date="2011-??-??">
+           <action dev="poi-developers" type="fix">51458 - Correct BitField wrapping when setting large values</action>
            <action dev="poi-developers" type="add">51460 - Improve HSSF performance when loading very long rows, by switching the CellValue array to an iterator</action>
            <action dev="poi-developers" type="fix">51444 - Prevent corrupted output when saving files created by LibreOffice 3.3 </action>
            <action dev="poi-developers" type="add">51422 - Support using RecalcIdRecord to trigger a full formula recalculation on load  </action>
index 70d8f22081195625270ef41c67246bfd6e1da062..f171145b4e10e5e33c221fa431514f92b6fbec4f 100644 (file)
@@ -71,7 +71,7 @@ public class BitField
 
     public int getValue(final int holder)
     {
-        return getRawValue(holder) >> _shift_count;
+        return getRawValue(holder) >>> _shift_count;
     }
 
     /**
index ef55ab7451106f57725c4e04e95cc8e1dad7b185..a5c953a435d70d74fe7dd3296e7e1028159c6748 100644 (file)
@@ -188,4 +188,13 @@ public final class TestBitField extends TestCase {
         assertEquals(bf_single.clearShort(( short ) -1),
                      bf_single.setShortBoolean(( short ) -1, false));
     }
+    
+    public void testSetLargeValues() {
+       final BitField bf1 = new BitField(0xF), bf2 = new BitField(0xF0000000);
+       int a = 0;
+       a = bf1.setValue(a, 9);
+       a = bf2.setValue(a, 9);
+       assertEquals(9, bf1.getValue(a));
+       assertEquals(9, bf2.getValue(a));
+    }
 }