You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2019/03/15 19:51:32 UTC
[hbase] branch master updated: HBASE-22032 KeyValue validation
should check for null byte array
This is an automated email from the ASF dual-hosted git repository.
apurtell pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hbase.git
The following commit(s) were added to refs/heads/master by this push:
new d4c3777 HBASE-22032 KeyValue validation should check for null byte array
d4c3777 is described below
commit d4c37778ee35f6e7c4129e2f6e33630154fc61ad
Author: Geoffrey Jacoby <gj...@apache.org>
AuthorDate: Mon Mar 11 14:08:49 2019 -0700
HBASE-22032 KeyValue validation should check for null byte array
Signed-off-by: Andrew Purtell <ap...@apache.org>
---
.../main/java/org/apache/hadoop/hbase/KeyValueUtil.java | 8 +++++++-
.../test/java/org/apache/hadoop/hbase/TestKeyValue.java | 16 +++++++++++++++-
2 files changed, 22 insertions(+), 2 deletions(-)
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
index 581c6bb..0a6d63a 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/KeyValueUtil.java
@@ -509,11 +509,17 @@ public class KeyValueUtil {
}
static String bytesToHex(byte[] buf, int offset, int length) {
- return ", KeyValueBytesHex=" + Bytes.toStringBinary(buf, offset, length) + ", offset=" + offset
+ String bufferContents = buf != null ? Bytes.toStringBinary(buf, offset, length) : "<null>";
+ return ", KeyValueBytesHex=" + bufferContents + ", offset=" + offset
+ ", length=" + length;
}
static void checkKeyValueBytes(byte[] buf, int offset, int length, boolean withTags) {
+ if (buf == null) {
+ throw new IllegalArgumentException("Invalid to have null " +
+ "byte array in KeyValue.");
+ }
+
int pos = offset, endOffset = offset + length;
// check the key
if (pos + Bytes.SIZEOF_INT > endOffset) {
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
index 2165b38..e14fdf2 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestKeyValue.java
@@ -623,6 +623,20 @@ public class TestKeyValue {
}
}
+ @Test
+ public void testNullByteArrayKeyValueFailure() {
+ //can't add to testCheckKeyValueBytesFailureCase because it
+ //goes through the InputStream KeyValue API which can't produce a null buffer
+ try {
+ KeyValue kv = new KeyValue(null, 0, 0);
+ } catch (IllegalArgumentException iae){
+ assertEquals("Invalid to have null byte array in KeyValue.", iae.getMessage());
+ return;
+ }
+ fail("Should have thrown an IllegalArgumentException when " +
+ "creating a KeyValue with a null buffer");
+ }
+
private static class FailureCase {
byte[] buf;
int offset;
@@ -681,7 +695,7 @@ public class TestKeyValue {
"Overflow when reading family length at position=13",
"Invalid family length in KeyValue, familyLength=1", "Timestamp cannot be negative, ts=-1",
"Invalid type in KeyValue, type=3", "Overflow when reading value part at position=25",
- "Invalid tags length in KeyValue at position=26", };
+ "Invalid tags length in KeyValue at position=26"};
byte[][] withTagsInputs = new byte[][] {
Bytes.toBytesBinary("\\x00\\x00\\x00\\x11\\x00\\x00\\x00\\x01\\x00\\x03ROW\\x01FQ\\x00"
+ "\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x04V\\x01"), // case.13