Michal Foksa created AVRO-4151: ---------------------------------- Summary: When Union annotation includes class it annotates getSchema() fails with StackOverflowError. Key: AVRO-4151 URL: https://issues.apache.org/jira/browse/AVRO-4151 Project: Apache Avro Issue Type: Bug Components: java Affects Versions: 1.11.4 Reporter: Michal Foksa
When a class annotated with @Union includes the annotated class (itself), ReflectData.get().getSchema(AnnotatedClass.class) fails with StackOverflowError due to going into infinite loop. Test: {code:java} @Union({Animal.class, Cat.class, Dog.class}) public static class Animal {} public static class Cat extends Animal {} public static class Dog extends Animal {} @Test void union_with_itself() { ReflectData.get().getSchema(Animal.class); }{code} fails with: {code:java} java.lang.StackOverflowError at jdk.proxy2/jdk.proxy2.$Proxy8.value(Unknown Source) at org.apache.avro.reflect.ReflectData.getAnnotatedUnion(ReflectData.java:810) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:703) at org.apache.avro.reflect.ReflectData.getAnnotatedUnion(ReflectData.java:811) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:703) at org.apache.avro.reflect.ReflectData.getAnnotatedUnion(ReflectData.java:811) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:703) at org.apache.avro.reflect.ReflectData.getAnnotatedUnion(ReflectData.java:811) at org.apache.avro.reflect.ReflectData.createSchema(ReflectData.java:703) .....{code} I think it is valid use case. -- This message was sent by Atlassian Jira (v8.20.10#820010)