Index: src/test/java/org/apache/hadoop/hbase/TestKeyValue.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/TestKeyValue.java (revision 1235448) +++ src/test/java/org/apache/hadoop/hbase/TestKeyValue.java (working copy) @@ -56,6 +56,21 @@ assertFalse(aaa.matchingColumn(family2,qualifier2)); } + /** + * Test a corner case when the family qualifier is a prefix of the + * column qualifier. + */ + public void testColumnCompare_prefix() throws Exception { + final byte [] a = Bytes.toBytes("aaa"); + byte [] family1 = Bytes.toBytes("abc"); + byte [] qualifier1 = Bytes.toBytes("def"); + byte [] family2 = Bytes.toBytes("ab"); + byte [] qualifier2 = Bytes.toBytes("def"); + + KeyValue aaa = new KeyValue(a, family1, qualifier1, 0L, Type.Put, a); + assertFalse(aaa.matchingColumn(family2, qualifier2)); + } + public void testBasics() throws Exception { LOG.info("LOWKEY: " + KeyValue.LOWESTKEY.toString()); check(Bytes.toBytes(getName()), Index: src/main/java/org/apache/hadoop/hbase/KeyValue.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/KeyValue.java (revision 1235448) +++ src/main/java/org/apache/hadoop/hbase/KeyValue.java (working copy) @@ -1258,7 +1258,7 @@ int o = getFamilyOffset(rl); int fl = getFamilyLength(o); int ql = getQualifierLength(rl,fl); - if (!Bytes.equals(family, 0, family.length, this.bytes, o, family.length)) { + if (!Bytes.equals(family, 0, family.length, this.bytes, o, fl)) { return false; } if (qualifier == null || qualifier.length == 0) {