You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2012/10/27 23:28:33 UTC
svn commit: r1402888 - in /hbase/branches/0.94/src:
main/java/org/apache/hadoop/hbase/filter/BitComparator.java
test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java
Author: larsh
Date: Sat Oct 27 21:28:33 2012
New Revision: 1402888
URL: http://svn.apache.org/viewvc?rev=1402888&view=rev
Log:
HBASE-6846 BitComparator bug - ArrayIndexOutOfBoundsException (Lucian George Iordache)
Modified:
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/filter/BitComparator.java
hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java
Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/filter/BitComparator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/filter/BitComparator.java?rev=1402888&r1=1402887&r2=1402888&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/filter/BitComparator.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/filter/BitComparator.java Sat Oct 27 21:28:33 2012
@@ -80,7 +80,7 @@ public class BitComparator extends Writa
}
int b = 0;
//Iterating backwards is faster because we can quit after one non-zero byte.
- for (int i = value.length - 1; i >= 0 && b == 0; i--) {
+ for (int i = length - 1; i >= 0 && b == 0; i--) {
switch (bitOperator) {
case AND:
b = (this.value[i] & value[i+offset]) & 0xff;
Modified: hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java?rev=1402888&r1=1402887&r2=1402888&view=diff
==============================================================================
--- hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java (original)
+++ hbase/branches/0.94/src/test/java/org/apache/hadoop/hbase/filter/TestBitComparator.java Sat Oct 27 21:28:33 2012
@@ -32,6 +32,11 @@ public class TestBitComparator extends T
private static byte[] data1 = new byte[]{15, 0, 0, 0, 0, 0};
private static byte[] data2 = new byte[]{0, 0, 0, 0, 0, 15};
private static byte[] data3 = new byte[]{15, 15, 15, 15, 15};
+
+ // data for testing compareTo method with offset and length parameters
+ private static byte[] data1_2 = new byte[]{15, 15, 0, 0, 0, 0, 0, 15};
+ private static byte[] data2_2 = new byte[]{15, 0, 0, 0, 0, 0, 15, 15};
+
private final int Equal = 0;
private final int NotEqual = 1;
@@ -65,6 +70,26 @@ public class TestBitComparator extends T
assertEquals(comparator.compareTo(data), expected);
}
+ public void testANDOperationWithOffset() {
+ testOperationWithOffset(data1_2, ones, BitComparator.BitwiseOp.AND, Equal);
+ testOperationWithOffset(data1_2, data0, BitComparator.BitwiseOp.AND, NotEqual);
+ testOperationWithOffset(data2_2, data1, BitComparator.BitwiseOp.AND, NotEqual);
+ }
+
+ public void testOROperationWithOffset() {
+ testOperationWithOffset(data1_2, zeros, BitComparator.BitwiseOp.OR, Equal);
+ testOperationWithOffset(data2_2, data1, BitComparator.BitwiseOp.OR, Equal);
+ }
+
+ public void testXOROperationWithOffset() {
+ testOperationWithOffset(data2_2, data1, BitComparator.BitwiseOp.XOR, Equal);
+ }
+
+ private void testOperationWithOffset(byte[] data, byte[] comparatorBytes, BitComparator.BitwiseOp operator, int expected) {
+ BitComparator comparator = new BitComparator(comparatorBytes, operator);
+ assertEquals(comparator.compareTo(data, 1, comparatorBytes.length), expected);
+ }
+
@org.junit.Rule
public org.apache.hadoop.hbase.ResourceCheckerJUnitRule cu =
new org.apache.hadoop.hbase.ResourceCheckerJUnitRule();