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

BitComparator bug - ArrayIndexOutOfBoundsException

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.94.1
    • 0.94.3, 0.95.0
    • Filters
    • None
    • HBase 0.94.1 + Hadoop 2.0.0-cdh4.0.1

    • 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

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

            Dates

              Created:
              Updated:
              Resolved: