You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@avro.apache.org by cu...@apache.org on 2013/02/12 20:42:37 UTC

svn commit: r1445325 - in /avro/trunk: CHANGES.txt lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java

Author: cutting
Date: Tue Feb 12 19:42:36 2013
New Revision: 1445325

URL: http://svn.apache.org/r1445325
Log:
AVRO-1198. Java: Improve error message for malformed data.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java
    avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1445325&r1=1445324&r2=1445325&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Tue Feb 12 19:42:36 2013
@@ -30,6 +30,8 @@ Trunk (not yet released)
 
     AVRO-1241. Java: Optimize Trevni string input. (Joseph Adler via cutting)
 
+    AVRO-1198. Java: Improve error message for malformed data. (cutting)
+
   BUG FIXES
 
     AVRO-1231. Java: Fix Trevni shredder to work on non-recursive

Modified: avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java?rev=1445325&r1=1445324&r2=1445325&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java (original)
+++ avro/trunk/lang/java/avro/src/main/java/org/apache/avro/io/BinaryDecoder.java Tue Feb 12 19:42:36 2013
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.ByteBuffer;
 
+import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.util.Utf8;
 
 /** An {@link Decoder} for binary-format data.
@@ -331,6 +332,9 @@ public class BinaryDecoder extends Decod
    */
   protected void doReadBytes(byte[] bytes, int start, int length)
       throws IOException {
+    if (length < 0)
+      throw new AvroRuntimeException("Malformed data. Length is negative: "
+                                     + length);
     int remaining = limit - pos;
     if (length <= remaining) {
       System.arraycopy(buf, pos, bytes, start, length);

Modified: avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java?rev=1445325&r1=1445324&r2=1445325&view=diff
==============================================================================
--- avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java (original)
+++ avro/trunk/lang/java/avro/src/test/java/org/apache/avro/io/TestBinaryDecoder.java Tue Feb 12 19:42:36 2013
@@ -29,6 +29,7 @@ import java.util.Collection;
 
 import org.apache.avro.RandomData;
 import org.apache.avro.Schema;
+import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.generic.GenericDatumReader;
 import org.apache.avro.generic.GenericDatumWriter;
 import org.apache.avro.util.ByteBufferInputStream;
@@ -356,6 +357,19 @@ public class TestBinaryDecoder {
     Assert.assertEquals("Invalid long encoding", message);
   }
 
+  @Test
+  public void testBadLengthEncoding() throws IOException {
+    byte[] bad = new byte[] { (byte)1 };
+    Decoder bd = factory.binaryDecoder(bad, null);
+    String message = "";
+    try {
+      bd.readString();
+    } catch (AvroRuntimeException e) {
+      message = e.getMessage();
+    }
+    Assert.assertEquals("Malformed data. Length is negative: -1", message);
+  }
+
   @Test(expected=EOFException.class)
   public void testIntTooShort() throws IOException {
     byte[] badint = new byte[4];