Repository: avro Updated Branches: refs/heads/master 5e6ffb8d4 -> 62ad11dcf
AVRO-1799: Fix GenericRecord#toString ByteBuffer bug. Reading the ByteBuffer to return a string representaton modified the buffer's position. The solution is to duplicate the buffer before reading its content. Project: http://git-wip-us.apache.org/repos/asf/avro/repo Commit: http://git-wip-us.apache.org/repos/asf/avro/commit/62ad11dc Tree: http://git-wip-us.apache.org/repos/asf/avro/tree/62ad11dc Diff: http://git-wip-us.apache.org/repos/asf/avro/diff/62ad11dc Branch: refs/heads/master Commit: 62ad11dcf765d6735ef652f4252d19e4ded7afae Parents: 5e6ffb8 Author: Ryan Blue <[email protected]> Authored: Sun Feb 21 18:16:07 2016 -0800 Committer: Ryan Blue <[email protected]> Committed: Mon Feb 29 10:48:59 2016 -0800 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ .../avro/src/main/java/org/apache/avro/generic/GenericData.java | 2 +- .../src/test/java/org/apache/avro/generic/TestGenericData.java | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/avro/blob/62ad11dc/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index cadc982..00d9deb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -20,6 +20,8 @@ Trunk (not yet released) AVRO-1493. Java: Avoid the "Turkish Locale Problem". Schema fingerprints are now consistent regardless of the environment's locale. + AVRO-1799: Fix GenericRecord#toString ByteBuffer handling. (blue) + Avro 1.8.0 (22 January 2016) INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/avro/blob/62ad11dc/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java ---------------------------------------------------------------------- diff --git a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java index 7c70631..2b01de4 100644 --- a/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java +++ b/lang/java/avro/src/main/java/org/apache/avro/generic/GenericData.java @@ -547,7 +547,7 @@ public class GenericData { buffer.append("\""); } else if (isBytes(datum)) { buffer.append("{\"bytes\": \""); - ByteBuffer bytes = (ByteBuffer)datum; + ByteBuffer bytes = ((ByteBuffer) datum).duplicate(); writeEscapedString(StandardCharsets.ISO_8859_1.decode(bytes), buffer); buffer.append("\"}"); } else if (((datum instanceof Float) && // quote Nan & Infinity http://git-wip-us.apache.org/repos/asf/avro/blob/62ad11dc/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java ---------------------------------------------------------------------- diff --git a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java index 68c33b6..b8b59e2 100644 --- a/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java +++ b/lang/java/avro/src/test/java/org/apache/avro/generic/TestGenericData.java @@ -321,7 +321,9 @@ public class TestGenericData { @Test public void testToStringEscapesControlCharsInBytes() throws Exception { GenericData data = GenericData.get(); - assertEquals("{\"bytes\": \"a\\nb\"}", data.toString(ByteBuffer.wrap(new byte[] {'a', '\n', 'b'}))); + ByteBuffer bytes = ByteBuffer.wrap(new byte[] {'a', '\n', 'b'}); + assertEquals("{\"bytes\": \"a\\nb\"}", data.toString(bytes)); + assertEquals("{\"bytes\": \"a\\nb\"}", data.toString(bytes)); } @Test public void testToStringFixed() throws Exception {
