Hi,

When invoking GenericData.get().validate() with a union schema containing 
multiple record schemas an IndexOutOfBoundsException is possible. 

The exception results under the following conditions:
  1) Union contains multiple record schemas
  2) The first record schema in the union contains more fields than subsequent 
record schemas
  3) validate() is invoked with the union schema and a record of one of the 
subsequent record schemas.

Below is a simple unit test which reproduces the exception.

  @Test
  public void testValidateUnion() {
      Schema type1Schema = SchemaBuilder.record("Type1")
          .fields()
          .requiredString("myString")
          .requiredInt("myInt")
          .endRecord();

      Schema type2Schema = SchemaBuilder.record("Type2")
          .fields()
          .requiredString("myString")
          .endRecord();

      Schema unionSchema = SchemaBuilder.unionOf()
          .type(type1Schema).and().type(type2Schema)
          .endUnion();

    GenericRecord record = new GenericData.Record(type2Schema);
    record.put("myString", "myValue");
    GenericData.get().validate(unionSchema, record);
  }

I'm happy to submit a JIRA for this issue, but thought I'd check in with the 
mailing list before doing so.

Thanks,
Jeff

Reply via email to