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);