You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by kt...@apache.org on 2016/01/20 01:05:53 UTC
accumulo git commit: ACCUMULO-4098 Fixed bug with ByteBuffers thats
do not start at 0
Repository: accumulo
Updated Branches:
refs/heads/1.6 8c6866efb -> a2c2d38aa
ACCUMULO-4098 Fixed bug with ByteBuffers thats do not start at 0
Project: http://git-wip-us.apache.org/repos/asf/accumulo/repo
Commit: http://git-wip-us.apache.org/repos/asf/accumulo/commit/a2c2d38a
Tree: http://git-wip-us.apache.org/repos/asf/accumulo/tree/a2c2d38a
Diff: http://git-wip-us.apache.org/repos/asf/accumulo/diff/a2c2d38a
Branch: refs/heads/1.6
Commit: a2c2d38aa248056c1cf592e8a2a0ada17eb518e2
Parents: 8c6866e
Author: Keith Turner <kt...@apache.org>
Authored: Tue Jan 19 15:55:34 2016 -0500
Committer: Keith Turner <kt...@apache.org>
Committed: Tue Jan 19 15:55:34 2016 -0500
----------------------------------------------------------------------
.../core/util/UnsynchronizedBuffer.java | 4 +-
.../core/util/UnsynchronizedBufferTest.java | 56 ++++++++++++++++++++
2 files changed, 58 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/accumulo/blob/a2c2d38a/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java b/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
index 6947d64..f353613 100644
--- a/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
+++ b/core/src/main/java/org/apache/accumulo/core/util/UnsynchronizedBuffer.java
@@ -118,8 +118,8 @@ public class UnsynchronizedBuffer {
}
public Reader(ByteBuffer buffer) {
- if (buffer.hasArray()) {
- offset = buffer.arrayOffset();
+ if (buffer.hasArray() && buffer.array().length == buffer.arrayOffset() + buffer.limit()) {
+ offset = buffer.arrayOffset() + buffer.position();
data = buffer.array();
} else {
data = new byte[buffer.remaining()];
http://git-wip-us.apache.org/repos/asf/accumulo/blob/a2c2d38a/core/src/test/java/org/apache/accumulo/core/util/UnsynchronizedBufferTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/accumulo/core/util/UnsynchronizedBufferTest.java b/core/src/test/java/org/apache/accumulo/core/util/UnsynchronizedBufferTest.java
new file mode 100644
index 0000000..6416219
--- /dev/null
+++ b/core/src/test/java/org/apache/accumulo/core/util/UnsynchronizedBufferTest.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.accumulo.core.util;
+
+import java.nio.ByteBuffer;
+
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+import com.google.common.base.Charsets;
+
+public class UnsynchronizedBufferTest {
+
+ @Rule
+ public ExpectedException thrown = ExpectedException.none();
+
+ @Test
+ public void testByteBufferConstructor() {
+ byte[] test = "0123456789".getBytes(Charsets.UTF_8);
+
+ ByteBuffer bb1 = ByteBuffer.wrap(test);
+ UnsynchronizedBuffer.Reader ub = new UnsynchronizedBuffer.Reader(bb1);
+ byte[] buf = new byte[10];
+ ub.readBytes(buf);
+ Assert.assertEquals("0123456789", new String(buf, Charsets.UTF_8));
+
+ ByteBuffer bb2 = ByteBuffer.wrap(test, 3, 5);
+
+ ub = new UnsynchronizedBuffer.Reader(bb2);
+ buf = new byte[5];
+ // should read data from offset 3 where the byte buffer starts
+ ub.readBytes(buf);
+ Assert.assertEquals("34567", new String(buf, Charsets.UTF_8));
+
+ buf = new byte[6];
+ // the byte buffer has the extra byte, but should not be able to read it...
+ thrown.expect(ArrayIndexOutOfBoundsException.class);
+ ub.readBytes(buf);
+ }
+}