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/12/05 07:49:54 UTC

hbase git commit: HBASE-19431 The tag array written by IndividualBytesFieldCell#write is out of bounds

Repository: hbase
Updated Branches:
  refs/heads/branch-2 73e3b0e82 -> 2ab0470b4


HBASE-19431 The tag array written by IndividualBytesFieldCell#write is out of bounds


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/2ab0470b
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/2ab0470b
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/2ab0470b

Branch: refs/heads/branch-2
Commit: 2ab0470b433806a66c469f70f8db01eb4e76f68a
Parents: 73e3b0e
Author: Chia-Ping Tsai <ch...@gmail.com>
Authored: Tue Dec 5 14:20:30 2017 +0800
Committer: Chia-Ping Tsai <ch...@gmail.com>
Committed: Tue Dec 5 15:42:29 2017 +0800

----------------------------------------------------------------------
 .../hadoop/hbase/IndividualBytesFieldCell.java  |  2 +-
 .../hbase/TestIndividualBytesFieldCell.java     | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/2ab0470b/hbase-common/src/main/java/org/apache/hadoop/hbase/IndividualBytesFieldCell.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/IndividualBytesFieldCell.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/IndividualBytesFieldCell.java
index 6233553..78ad578 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/IndividualBytesFieldCell.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/IndividualBytesFieldCell.java
@@ -155,7 +155,7 @@ public class IndividualBytesFieldCell implements ExtendedCell {
       out.write((byte)(0xff & getTagsLength()));
 
       // Tags byte array
-      out.write(tags);
+      out.write(tags, tagsOffset, tagsLength);
     }
 
     return getSerializedSize(withTags);

http://git-wip-us.apache.org/repos/asf/hbase/blob/2ab0470b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestIndividualBytesFieldCell.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestIndividualBytesFieldCell.java b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestIndividualBytesFieldCell.java
index 49eb2b7..0fde1a3 100644
--- a/hbase-common/src/test/java/org/apache/hadoop/hbase/TestIndividualBytesFieldCell.java
+++ b/hbase-common/src/test/java/org/apache/hadoop/hbase/TestIndividualBytesFieldCell.java
@@ -239,4 +239,24 @@ public class TestIndividualBytesFieldCell {
             Bytes.toBytes("value"), 0, 5,
             Bytes.toBytes("tags"), 0, 100);
   }
+
+  @Test
+  public void testWriteTag() throws IOException {
+    byte[] tags = Bytes.toBytes("---tags---");
+    int tagOffset = 3;
+    int length = 4;
+    IndividualBytesFieldCell cell
+        = new IndividualBytesFieldCell(Bytes.toBytes("row"), 0, 3,
+          Bytes.toBytes("family"), 0, 6,
+          Bytes.toBytes("qualifier"), 0, 9,
+          0L, KeyValue.Type.Put, 0,
+          Bytes.toBytes("value"), 0, 5,
+          tags, tagOffset, length);
+
+    try (ByteArrayOutputStream output = new ByteArrayOutputStream(300)) {
+      cell.write(output, true);
+      byte[] buf = output.toByteArray();
+      assertEquals(cell.getSerializedSize(true), buf.length);
+    }
+  }
 }