Uploaded image for project: 'HBase'
  1. HBase
  2. HBASE-6846

BitComparator bug - ArrayIndexOutOfBoundsException

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 0.94.1
    • Fix Version/s: 0.94.3, 0.95.0
    • Component/s: Filters
    • Labels:
      None
    • Environment:

      HBase 0.94.1 + Hadoop 2.0.0-cdh4.0.1

    • Release Note:
      BitComparator bug - ArrayIndexOutOfBoundsException corrected

      Description

      The HBase 0.94.1 BitComparator introduced a bug in the method "compareTo":

      @Override
        public int compareTo(byte[] value, int offset, int length) {
          if (length != this.value.length) {
            return 1;
          }
          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--) {
            switch (bitOperator) {
              case AND:
                b = (this.value[i] & value[i+offset]) & 0xff;
                break;
              case OR:
                b = (this.value[i] | value[i+offset]) & 0xff;
                break;
              case XOR:
                b = (this.value[i] ^ value[i+offset]) & 0xff;
                break;
            }
          }
          return b == 0 ? 1 : 0;
        }
      

      I've encountered this problem when using a BitComparator with a configured this.value.length=8, and in the HBase table there were KeyValues with keyValue.getBuffer().length=207911 bytes. In this case:

          for (int i = 207910; i >= 0 && b == 0; i--) {
            switch (bitOperator) {
              case AND:
                b = (this.value[207910] ... ==> ArrayIndexOutOfBoundsException
                break;
      

      That loop should use:

        for (int i = length - 1; i >= 0 && b == 0; i--) { (or this.value.length.)
      

      Should I provide a patch for correcting the problem?

        Attachments

        1. 6846-trunk.txt
          3 kB
          Lars Hofhansl
        2. HBASE-6846.patch
          3 kB
          Lucian George Iordache

          Activity

            People

            • Assignee:
              lucian.iordache Lucian George Iordache
              Reporter:
              lucian.iordache Lucian George Iordache
            • Votes:
              0 Vote for this issue
              Watchers:
              6 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: