You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by br...@apache.org on 2011/09/07 20:12:34 UTC
svn commit: r1166292 - in /thrift/trunk/lib/java:
src/org/apache/thrift/TBaseHelper.java
test/org/apache/thrift/TestTBaseHelper.java
Author: bryanduxbury
Date: Wed Sep 7 18:12:34 2011
New Revision: 1166292
URL: http://svn.apache.org/viewvc?rev=1166292&view=rev
Log:
THRIFT-1328. java: TBaseHelper.toString(...) appends ByteBuffer data outside of valid buffer range
This patch now correctly considers both arrayOffset and position when determining how to access the backing array of a buffer.
Patch: Andy Schlaikjer
Modified:
thrift/trunk/lib/java/src/org/apache/thrift/TBaseHelper.java
thrift/trunk/lib/java/test/org/apache/thrift/TestTBaseHelper.java
Modified: thrift/trunk/lib/java/src/org/apache/thrift/TBaseHelper.java
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/java/src/org/apache/thrift/TBaseHelper.java?rev=1166292&r1=1166291&r2=1166292&view=diff
==============================================================================
--- thrift/trunk/lib/java/src/org/apache/thrift/TBaseHelper.java (original)
+++ thrift/trunk/lib/java/src/org/apache/thrift/TBaseHelper.java Wed Sep 7 18:12:34 2011
@@ -224,11 +224,12 @@ public final class TBaseHelper {
byte[] buf = bb.array();
int arrayOffset = bb.arrayOffset();
- int origLimit = bb.limit();
- int limit = (origLimit - arrayOffset > 128) ? arrayOffset + 128 : origLimit;
+ int offset = arrayOffset + bb.position();
+ int origLimit = arrayOffset + bb.limit();
+ int limit = (origLimit - offset > 128) ? offset + 128 : origLimit;
- for (int i = arrayOffset; i < limit; i++) {
- if (i > arrayOffset) {
+ for (int i = offset; i < limit; i++) {
+ if (i > offset) {
sb.append(" ");
}
sb.append(paddedByteString(buf[i]));
Modified: thrift/trunk/lib/java/test/org/apache/thrift/TestTBaseHelper.java
URL: http://svn.apache.org/viewvc/thrift/trunk/lib/java/test/org/apache/thrift/TestTBaseHelper.java?rev=1166292&r1=1166291&r2=1166292&view=diff
==============================================================================
--- thrift/trunk/lib/java/test/org/apache/thrift/TestTBaseHelper.java (original)
+++ thrift/trunk/lib/java/test/org/apache/thrift/TestTBaseHelper.java Wed Sep 7 18:12:34 2011
@@ -155,6 +155,23 @@ public class TestTBaseHelper extends Tes
assertNull(TBaseHelper.rightSize(null));
}
+ public void testByteBufferToString() {
+ byte[] array = new byte[]{1, 2, 3};
+ ByteBuffer bb = ByteBuffer.wrap(array, 1, 2);
+ StringBuilder sb = new StringBuilder();
+ TBaseHelper.toString(bb, sb);
+ assertEquals("02 03", sb.toString());
+ bb = ByteBuffer.wrap(array, 0, array.length);
+ bb.position(1);
+ bb = bb.slice();
+ assertEquals(1, bb.arrayOffset());
+ assertEquals(0, bb.position());
+ assertEquals(2, bb.limit());
+ sb = new StringBuilder();
+ TBaseHelper.toString(bb, sb);
+ assertEquals("02 03", sb.toString());
+ }
+
public void testCopyBinaryWithByteBuffer() throws Exception {
byte[] bytes = new byte[]{0, 1, 2, 3, 4, 5};
ByteBuffer b = ByteBuffer.wrap(bytes);