Open
Description
Describe the bug
@Serializable
serializers are successfully decoding JSON that is missing commas between its properties
To Reproduce
These tests will pass with multiple properties and multiple combinations of missing commas, so not a special case of N = 2.
import kotlinx.serialization.Serializable
import kotlinx.serialization.SerializationException
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import org.junit.jupiter.api.Test
import strikt.api.expectThat
import strikt.api.expectThrows
import strikt.assertions.contains
import strikt.assertions.isEqualTo
import strikt.assertions.isNotNull
class JsonTest {
@Serializable
data class Foo(
val bar: String,
val baz: Int,
)
val invalidEncoding = """{
"bar": "buz"
"baz": 1
}""".trimIndent()
@Test
fun `decoding invalid JSON is tolerated by @Serializable serializers`() {
val result = Json.decodeFromString(Foo.serializer(), invalidEncoding)
expectThat(result) {
get(Foo::bar) isEqualTo "buz"
get(Foo::baz) isEqualTo 1
}
}
@Test
fun `decoding invalid JSON is not tolerated by JsonObject's serializer`() {
expectThrows<SerializationException> {
Json.decodeFromString(JsonObject.serializer(), invalidEncoding)
}.and {
get(SerializationException::message).isNotNull().contains("Unexpected JSON token")
}
}
}
Expected behavior
The decoding invalid JSON is tolerated by @Serializable serializers
test should fail decoding the invalid JSON
Environment
- Kotlin version: 1.8.20
- Library version: 1.4.1
- Kotlin platforms: JVM
- Gradle version: 7.5
- IDE version (if bug is related to the IDE) IntelliJ 2023.1 CE
- Other relevant context JDK 17