From 7f7795d0d2a025d4f75d4ae348bbc59600d9345f Mon Sep 17 00:00:00 2001 From: Bryan Duxbury Date: Thu, 30 Sep 2010 19:37:01 +0000 Subject: [PATCH] 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/branches/0.5.x@1003215 13f79535-47bb-0310-9956-ffa450edef68 --- lib/java/src/org/apache/thrift/TBaseHelper.java | 7 +++++++ lib/java/test/org/apache/thrift/TestTBaseHelper.java | 4 ++++ 2 files changed, 11 insertions(+) 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)); } } -- 2.17.1