You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avro.apache.org by "Radai Rosenblatt (Jira)" <ji...@apache.org> on 2023/01/07 20:40:00 UTC

[jira] [Created] (AVRO-3703) avro 1.11.1 stopped validating namespace changes on deserialization

Radai Rosenblatt created AVRO-3703:
--------------------------------------

             Summary: avro 1.11.1 stopped validating namespace changes on deserialization
                 Key: AVRO-3703
                 URL: https://issues.apache.org/jira/browse/AVRO-3703
             Project: Apache Avro
          Issue Type: Bug
          Components: java
    Affects Versions: 1.11.1
            Reporter: Radai Rosenblatt


the following test passes on 1.11.0 but fails on 1.11.1:

{code}
@Test(expected = AvroTypeException.class)
  public void testFullnameValidation() throws Exception {
    String avsc1 =
        "{\n"
      + "  \"type\": \"record\",\n"
      + "  \"name\": \"RecordSimpleName\",\n"
      + "  \"namespace\": \"some.namespace\",\n"
      + "  \"fields\": [\n"
      + "    {\n"
      + "      \"name\" : \"enumField\",\n"
      + "      \"type\" : {\n"
      + "        \"type\" : \"enum\",\n"
      + "        \"name\" : \"InnerEnum\",\n"
      + "        \"symbols\" : [ \"THE\", \"SPEC\", \"IS\", \"A\", \"LIE\" ],\n"
      + "        \"doc\" : \"inherits no namespace so is InnerEnum\"\n"
      + "      }\n"
      + "    }\n"
      + "  ]\n"
      + "}\n";
    String avsc2 = avsc1.replace("some.namespace", "something.else");
    Schema schema1 = Schema.parse(avsc1);
    Schema schema2 = Schema.parse(avsc2);

    Assert.assertEquals(schema1.getName(), schema2.getName());
    Assert.assertNotEquals(schema1.getNamespace(), schema2.getNamespace());
    Assert.assertNotEquals(schema1.getFullName(), schema2.getFullName());

    GenericDatumReader<IndexedRecord> reader = new GenericDatumReader<>(schema1, schema2);
    JsonDecoder decoder = DecoderFactory.get().jsonDecoder(schema1, "{\"enumField\": \"LIE\"}");

    IndexedRecord deserialized = reader.read(null, decoder);
    Assert.fail("deserialization should have failed over namespace mismatch");
  }
{code}

looks like avro 1.11.1 disregards namespace/fullnames during deserialization? (this was the behaviour under avro 1.4)



--
This message was sent by Atlassian Jira
(v8.20.10#820010)