From 5b55934c9ea0fb41d48aea1fc262a49b0cb5c5b3 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 30 Mar 2023 14:23:15 +0200 Subject: [PATCH] chat component: allow unescaped control characters (e.g. \n in json string) The Cuberite kick message is now properly parsed --- src/main/java/de/bixilon/minosoft/util/json/Jackson.kt | 2 ++ .../de/bixilon/minosoft/data/text/ChatComponentTest.kt | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/src/main/java/de/bixilon/minosoft/util/json/Jackson.kt b/src/main/java/de/bixilon/minosoft/util/json/Jackson.kt index 4a800899b..541403bf8 100644 --- a/src/main/java/de/bixilon/minosoft/util/json/Jackson.kt +++ b/src/main/java/de/bixilon/minosoft/util/json/Jackson.kt @@ -14,6 +14,7 @@ package de.bixilon.minosoft.util.json import com.fasterxml.jackson.core.JsonParser +import com.fasterxml.jackson.core.json.JsonReadFeature import com.fasterxml.jackson.databind.DeserializationFeature import com.fasterxml.jackson.databind.MapperFeature import com.fasterxml.jackson.databind.PropertyNamingStrategies @@ -31,6 +32,7 @@ object Jackson { .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) .disable(JsonParser.Feature.AUTO_CLOSE_SOURCE) .enable(MapperFeature.ACCEPT_CASE_INSENSITIVE_ENUMS) + .enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS) .build() .registerModule( KotlinModule.Builder() diff --git a/src/test/java/de/bixilon/minosoft/data/text/ChatComponentTest.kt b/src/test/java/de/bixilon/minosoft/data/text/ChatComponentTest.kt index 7e60b9df1..1f93cab0d 100644 --- a/src/test/java/de/bixilon/minosoft/data/text/ChatComponentTest.kt +++ b/src/test/java/de/bixilon/minosoft/data/text/ChatComponentTest.kt @@ -227,6 +227,13 @@ internal class ChatComponentTest { assertEquals(expected, component) } + @Test + fun `JSON not escaped new line`() { + val text = ChatComponent.of("""{"text":"Unsupported protocol version 762.""" + "\n" + """Try connecting with Minecraft 1.8.x-1.12.x"}""") + val expected = TextComponent("Unsupported protocol version 762.\nTry connecting with Minecraft 1.8.x-1.12.x") + assertEquals(text, expected) + } + private fun assertEquals(expected: ChatComponent, actual: ChatComponent) { when (expected) { is BaseComponent -> {