[
https://issues.apache.org/jira/browse/AVRO-4151?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michal Foksa updated AVRO-4151:
-------------------------------
Affects Version/s: 1.12.0
> 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.12.0, 1.11.4
> Reporter: Michal Foksa
> Priority: Major
>
> 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)