You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ch...@apache.org on 2017/10/07 19:19:42 UTC
hbase git commit: HBASE-18921 Fix Result.current
ArrayIndexOutOfBoundsException
Repository: hbase
Updated Branches:
refs/heads/master 63440a9c7 -> 08274045c
HBASE-18921 Fix Result.current ArrayIndexOutOfBoundsException
Patch ArrayIndexOutOfBoundsException when current() is called after
advance() has already returned false
Signed-off-by: Chia-Ping Tsai <ch...@gmail.com>
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/08274045
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/08274045
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/08274045
Branch: refs/heads/master
Commit: 08274045c9d4688cc175f96a484b8b8fc2e161da
Parents: 63440a9
Author: Maytee Chinavanichkit <ma...@linecorp.com>
Authored: Mon Oct 2 15:19:25 2017 +0900
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Sun Oct 8 02:50:51 2017 +0800
----------------------------------------------------------------------
.../org/apache/hadoop/hbase/client/Result.java | 16 +++++++++++++---
.../apache/hadoop/hbase/client/TestResult.java | 18 ++++++++++++++++++
2 files changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/08274045/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java
index 1871d17..906caac 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/Result.java
@@ -30,6 +30,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.NavigableMap;
+import java.util.NoSuchElementException;
import java.util.TreeMap;
import org.apache.hadoop.hbase.Cell;
@@ -883,14 +884,23 @@ public class Result implements CellScannable, CellScanner {
@Override
public Cell current() {
- if (cells == null) return null;
- return (cellScannerIndex < 0)? null: this.cells[cellScannerIndex];
+ if (cells == null
+ || cellScannerIndex == INITIAL_CELLSCANNER_INDEX
+ || cellScannerIndex >= cells.length)
+ return null;
+ return this.cells[cellScannerIndex];
}
@Override
public boolean advance() {
if (cells == null) return false;
- return ++cellScannerIndex < this.cells.length;
+ cellScannerIndex++;
+ if (cellScannerIndex < this.cells.length) {
+ return true;
+ } else if (cellScannerIndex == this.cells.length) {
+ return false;
+ }
+ throw new NoSuchElementException("Cannot advance beyond the last cell");
}
public Boolean getExists() {
http://git-wip-us.apache.org/repos/asf/hbase/blob/08274045/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java
index 0e93ee0..bf9a69a 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/client/TestResult.java
@@ -25,6 +25,7 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.List;
+import java.util.NoSuchElementException;
import junit.framework.TestCase;
@@ -106,6 +107,23 @@ public class TestResult extends TestCase {
}
}
+ public void testCurrentOnEmptyCell() throws IOException {
+ Result r = Result.create(new Cell[0]);
+ assertFalse(r.advance());
+ assertNull(r.current());
+ }
+
+ public void testAdvanceTwiceOnEmptyCell() throws IOException {
+ Result r = Result.create(new Cell[0]);
+ assertFalse(r.advance());
+ try {
+ r.advance();
+ fail("NoSuchElementException should have been thrown!");
+ } catch (NoSuchElementException ex) {
+ LOG.debug("As expected: " + ex.getMessage());
+ }
+ }
+
public void testMultiVersionGetColumn() throws Exception {
KeyValue [] kvs1 = genKVs(row, family, value, 1, 100);
KeyValue [] kvs2 = genKVs(row, family, value, 200, 100);