Return-Path: X-Original-To: apmail-avro-commits-archive@www.apache.org Delivered-To: apmail-avro-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 529861091F for ; Wed, 28 May 2014 21:26:52 +0000 (UTC) Received: (qmail 7023 invoked by uid 500); 28 May 2014 21:26:52 -0000 Delivered-To: apmail-avro-commits-archive@avro.apache.org Received: (qmail 6950 invoked by uid 500); 28 May 2014 21:26:52 -0000 Mailing-List: contact commits-help@avro.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@avro.apache.org Delivered-To: mailing list commits@avro.apache.org Received: (qmail 6930 invoked by uid 99); 28 May 2014 21:26:52 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 May 2014 21:26:52 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 28 May 2014 21:26:50 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id B84FF23888E2; Wed, 28 May 2014 21:26:30 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1598146 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java Date: Wed, 28 May 2014 21:26:30 -0000 To: commits@avro.apache.org From: cutting@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140528212630.B84FF23888E2@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: cutting Date: Wed May 28 21:26:30 2014 New Revision: 1598146 URL: http://svn.apache.org/r1598146 Log: AVRO-1457. Java: Fix Encoder so that offset in non-array-backed ByteBuffers is not altered when written. Contributed by Rob Turner. Modified: avro/trunk/CHANGES.txt avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java Modified: avro/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1598146&r1=1598145&r2=1598146&view=diff ============================================================================== --- avro/trunk/CHANGES.txt (original) +++ avro/trunk/CHANGES.txt Wed May 28 21:26:30 2014 @@ -62,6 +62,9 @@ Trunk (not yet released) AVRO-1459. Ruby: Fix a typo in Rakefile that breaks 'gem install'. (Tomas Svarovsky via cutting) + AVRO-1457. Java: Fix Encoder so that offset in non-array-backed + ByteBuffers is not altered when written. (Rob Turner via cutting) + Avro 1.7.6 (15 January 2014) NEW FEATURES Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java?rev=1598146&r1=1598145&r2=1598146&view=diff ============================================================================== --- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java (original) +++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/Encoder.java Wed May 28 21:26:30 2014 @@ -174,7 +174,7 @@ public abstract class Encoder implements writeFixed(bytes.array(), bytes.arrayOffset() + pos, len); } else { byte[] b = new byte[len]; - bytes.get(b, 0, len); + bytes.duplicate().get(b, 0, len); writeFixed(b, 0, len); } } Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java?rev=1598146&r1=1598145&r2=1598146&view=diff ============================================================================== --- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java (original) +++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/JsonEncoder.java Wed May 28 21:26:30 2014 @@ -200,9 +200,7 @@ public class JsonEncoder extends Parsing writeBytes(bytes.array(), bytes.position(), bytes.remaining()); } else { byte[] b = new byte[bytes.remaining()]; - for (int i = 0; i < b.length; i++) { - b[i] = bytes.get(); - } + bytes.duplicate().get(b); writeBytes(b); } } Modified: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java?rev=1598146&r1=1598145&r2=1598146&view=diff ============================================================================== --- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java (original) +++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryEncoderFidelity.java Wed May 28 21:26:30 2014 @@ -32,19 +32,27 @@ public class TestBinaryEncoderFidelity { static byte[] legacydata; static byte[] complexdata; EncoderFactory factory = EncoderFactory.get(); - public static void generateData(Encoder e) throws IOException { + public static void generateData(Encoder e, boolean useReadOnlyByteBuffer) throws IOException { // generate a bunch of data that should test the bounds of a BinaryEncoder Random r = new Random(665321); e.writeNull(); e.writeBoolean(true); e.writeBoolean(false); byte[] bytes = new byte[10]; + ByteBuffer bb; + if (useReadOnlyByteBuffer) { + bb = ByteBuffer.wrap(bytes, 4, 4).asReadOnlyBuffer(); + } else { + bb = ByteBuffer.wrap(bytes, 4, 4); + } r.nextBytes(bytes); e.writeBytes(bytes); e.writeBytes(new byte[0]); e.writeBytes(bytes, 3, 3); e.writeBytes(new byte[0], 0, 0); e.writeBytes(ByteBuffer.wrap(bytes, 2, 2)); + e.writeBytes(bb); + e.writeBytes(bb); e.writeDouble(0.0); e.writeDouble(-0.0); e.writeDouble(Double.NaN); @@ -133,7 +141,7 @@ public class TestBinaryEncoderFidelity { public static void generateLegacyData() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); Encoder e = new LegacyBinaryEncoder(baos); - generateData(e); + generateData(e, false); legacydata = baos.toByteArray(); baos.reset(); generateComplexData(e); @@ -144,7 +152,7 @@ public class TestBinaryEncoderFidelity { public void testBinaryEncoder() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BinaryEncoder e = factory.binaryEncoder(baos, null); - generateData(e); + generateData(e, true); byte[] result = baos.toByteArray(); Assert.assertEquals(legacydata.length, result.length); Assert.assertArrayEquals(legacydata, result); @@ -159,7 +167,7 @@ public class TestBinaryEncoderFidelity { public void testDirectBinaryEncoder() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BinaryEncoder e = factory.directBinaryEncoder(baos, null); - generateData(e); + generateData(e, true); byte[] result = baos.toByteArray(); Assert.assertEquals(legacydata.length, result.length); Assert.assertArrayEquals(legacydata, result); @@ -175,7 +183,7 @@ public class TestBinaryEncoderFidelity { public void testBlockingBinaryEncoder() throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BinaryEncoder e = factory.blockingBinaryEncoder(baos, null); - generateData(e); + generateData(e, true); byte[] result = baos.toByteArray(); Assert.assertEquals(legacydata.length, result.length); Assert.assertArrayEquals(legacydata, result);