From: Bryan Duxbury Date: Thu, 30 Sep 2010 19:36:05 +0000 (+0000) Subject: THRIFT-939. java: optional binary fields throw NPE on default byte[] getters X-Git-Tag: 0.6.0~148 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=5bb525ccf938e3b183814f92097a96bb85941e07;p=common%2Fthrift.git THRIFT-939. java: optional binary fields throw NPE on default byte[] getters This patch deals with null ByteBuffers correctly. git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@1003212 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/java/src/org/apache/thrift/TBaseHelper.java b/lib/java/src/org/apache/thrift/TBaseHelper.java index 211ea620..2837d0b5 100644 --- a/lib/java/src/org/apache/thrift/TBaseHelper.java +++ b/lib/java/src/org/apache/thrift/TBaseHelper.java @@ -277,6 +277,9 @@ public final class TBaseHelper { } public static ByteBuffer copyBinary(final ByteBuffer orig) { + if (orig == null) { + return null; + } ByteBuffer copy = ByteBuffer.wrap(new byte[orig.remaining()]); if (orig.hasArray()) { System.arraycopy(orig.array(), orig.arrayOffset() + orig.position(), copy.array(), 0, orig.remaining()); @@ -288,6 +291,10 @@ public final class TBaseHelper { } public static byte[] copyBinary(final byte[] orig) { + if (orig == null) { + return null; + } + byte[] copy = new byte[orig.length]; System.arraycopy(orig, 0, copy, 0, orig.length); return copy; diff --git a/lib/java/test/org/apache/thrift/TestTBaseHelper.java b/lib/java/test/org/apache/thrift/TestTBaseHelper.java index a66e7892..6d72ad84 100644 --- a/lib/java/test/org/apache/thrift/TestTBaseHelper.java +++ b/lib/java/test/org/apache/thrift/TestTBaseHelper.java @@ -173,6 +173,8 @@ public class TestTBaseHelper extends TestCase { assertEquals(1, b.position()); b.reset(); assertEquals(0, b.position()); + + assertNull(TBaseHelper.copyBinary((ByteBuffer)null)); } public void testCopyBinaryWithByteArray() throws Exception { @@ -180,5 +182,7 @@ public class TestTBaseHelper extends TestCase { byte[] copy = TBaseHelper.copyBinary(bytes); assertEquals(ByteBuffer.wrap(bytes), ByteBuffer.wrap(copy)); assertNotSame(bytes, copy); + + assertNull(TBaseHelper.copyBinary((byte[])null)); } }