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 2010/12/13 21:01:25 UTC

svn commit: r1045347 - in /avro/trunk: CHANGES.txt lang/java/src/java/org/apache/avro/generic/GenericData.java lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java

Author: cutting
Date: Mon Dec 13 20:01:24 2010
New Revision: 1045347

URL: http://svn.apache.org/viewvc?rev=1045347&view=rev
Log:
AVRO-710. Java: Add bounds checking to GenericData.Array#get(int).  Contributed by Bo Shi.

Modified:
    avro/trunk/CHANGES.txt
    avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericData.java
    avro/trunk/lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java

Modified: avro/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/avro/trunk/CHANGES.txt?rev=1045347&r1=1045346&r2=1045347&view=diff
==============================================================================
--- avro/trunk/CHANGES.txt (original)
+++ avro/trunk/CHANGES.txt Mon Dec 13 20:01:24 2010
@@ -70,6 +70,9 @@ Avro 1.5.0 (unreleased)
     AVRO-705. Java: Fix DirectBinaryDecoder to correctly reinitialize.
     (thiru via cutting)
 
+    AVRO-710. Java: Add bounds checking to GenericData.Array#get(int).
+    (Bo Shi via cutting)
+
 Avro 1.4.1 (13 October 2010)
 
   NEW FEATURES

Modified: avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericData.java?rev=1045347&r1=1045346&r2=1045347&view=diff
==============================================================================
--- avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericData.java (original)
+++ avro/trunk/lang/java/src/java/org/apache/avro/generic/GenericData.java Mon Dec 13 20:01:24 2010
@@ -108,7 +108,11 @@ public class GenericData {
         public void remove() { throw new UnsupportedOperationException(); }
       };
     }
-    @Override public T get(int i) { return (T)elements[i]; }
+    @Override public T get(int i) {
+      if (i >= size)
+        throw new IndexOutOfBoundsException("Index " + i + " out of bounds.");
+      return (T)elements[i];
+    }
     @Override public boolean add(T o) {
       if (size == elements.length) {
         Object[] newElements = new Object[(size * 3)/2 + 1];

Modified: avro/trunk/lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java
URL: http://svn.apache.org/viewvc/avro/trunk/lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java?rev=1045347&r1=1045346&r2=1045347&view=diff
==============================================================================
--- avro/trunk/lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java (original)
+++ avro/trunk/lang/java/src/test/java/org/apache/avro/generic/TestGenericData.java Mon Dec 13 20:01:24 2010
@@ -123,5 +123,22 @@ public class TestGenericData {
       forward.reverse();
       assertTrue(forward.equals(backward));
   }
-    
+
+  @Test
+  public void testArrayListInterface() {
+    Schema schema = Schema.createArray(Schema.create(Schema.Type.INT));
+    GenericArray<Integer> array = new GenericData.Array<Integer>(1, schema);
+    array.add(99);
+    assertEquals(new Integer(99), array.get(0));
+    try {
+      array.get(2);
+      fail("Expected IndexOutOfBoundsException getting index 2");
+    } catch (IndexOutOfBoundsException e) {}
+    array.clear();
+    assertEquals(0, array.size());
+    try {
+      array.get(0);
+      fail("Expected IndexOutOfBoundsException getting index 0 after clear()");
+    } catch (IndexOutOfBoundsException e) {}
+  }
 }