Skip to content

ArrayIndexOutOfBoundsException when deserializing a custom object #1512

Open
@edenman

Description

@edenman

Describe the bug

Index 0 out of bounds for length 0
java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptor.getElementDescriptor(PluginGeneratedSerialDescriptor.kt:135)
	at kotlinx.serialization.descriptors.SerialDescriptorKt$elementDescriptors$1$1.next(SerialDescriptor.kt:284)
	at kotlinx.serialization.descriptors.SerialDescriptorKt$elementDescriptors$1$1.next(SerialDescriptor.kt:279)
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptorKt.hashCodeImpl(PluginGeneratedSerialDescriptor.kt:137)
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptor$_hashCode$2.invoke(PluginGeneratedSerialDescriptor.kt:44)
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptor$_hashCode$2.invoke(PluginGeneratedSerialDescriptor.kt:44)
	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptor.get_hashCode(PluginGeneratedSerialDescriptor.kt:44)
	at kotlinx.serialization.internal.PluginGeneratedSerialDescriptor.hashCode(PluginGeneratedSerialDescriptor.kt:97)
	at java.base/java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
	at kotlinx.serialization.json.internal.DescriptorSchemaCache.get(SchemaCache.kt:35)
	at kotlinx.serialization.json.internal.DescriptorSchemaCache.getOrPut(SchemaCache.kt:27)
	at kotlinx.serialization.json.internal.JsonTreeDecoder.elementName(TreeJsonDecoder.kt:221)
	at kotlinx.serialization.internal.NamedValueDecoder.getTag(Tagged.kt:330)
	at kotlinx.serialization.json.internal.JsonTreeDecoder.decodeElementIndex(TreeJsonDecoder.kt:204)
	at chat.quill.data.DefaultFoodContainerSerializer.deserialize(APIObjects.kt:40)
	at chat.quill.data.DefaultFoodContainerSerializer.deserialize(APIObjects.kt:40)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:63)
	at kotlinx.serialization.json.internal.AbstractJsonTreeDecoder.decodeSerializableValue(TreeJsonDecoder.kt:51)
	at kotlinx.serialization.json.internal.TreeJsonDecoderKt.readJson(TreeJsonDecoder.kt:24)
	at kotlinx.serialization.json.Json.decodeFromJsonElement(Json.kt:114)
	at kotlinx.serialization.json.JsonTransformingSerializer.deserialize(JsonTransformingSerializer.kt:78)
	at kotlinx.serialization.json.internal.PolymorphicKt.decodeSerializableValuePolymorphic(Polymorphic.kt:63)
	at kotlinx.serialization.json.internal.StreamingJsonDecoder.decodeSerializableValue(StreamingJsonDecoder.kt:32)
	at kotlinx.serialization.json.Json.decodeFromString(Json.kt:95)
	at chat.quill.data.SerializationTest.container(SerializationTest.kt:27)

To Reproduce
Repro project: https://github.com/edenman/kmpPlayground
Here's the failing test: https://github.com/edenman/kmpPlayground/blob/master/shared/src/androidTest/kotlin/chat/quill/data/SerializationTest.kt#L26
Objects are defined here: https://github.com/edenman/kmpPlayground/blob/master/shared/src/commonMain/kotlin/chat/quill/data/APIObjects.kt
Custom serializer is here: https://github.com/edenman/kmpPlayground/blob/master/shared/src/commonMain/kotlin/chat/quill/data/OneOfSerializer.kt#L68

Expected behavior
No exception

Environment

  • Kotlin version: 1.5.0
  • Library version: 1.2.1
  • Kotlin platforms: JVM
  • Gradle version: 7.0

This serializer worked fine on serialization 1.0.1 + kotlin 1.4.30-M1

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions