From 4496d13cdfa528d00b76b91b81ee009dcafe13f3 Mon Sep 17 00:00:00 2001 From: Tatu Saloranta Date: Mon, 23 Sep 2024 18:53:47 -0700 Subject: [PATCH] Add YAML test, too, for #497 --- .../yaml/failing/UnicodeYAMLRead497Test.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 yaml/src/test/java/com/fasterxml/jackson/dataformat/yaml/failing/UnicodeYAMLRead497Test.java diff --git a/yaml/src/test/java/com/fasterxml/jackson/dataformat/yaml/failing/UnicodeYAMLRead497Test.java b/yaml/src/test/java/com/fasterxml/jackson/dataformat/yaml/failing/UnicodeYAMLRead497Test.java new file mode 100644 index 00000000..58c5b28a --- /dev/null +++ b/yaml/src/test/java/com/fasterxml/jackson/dataformat/yaml/failing/UnicodeYAMLRead497Test.java @@ -0,0 +1,46 @@ +package com.fasterxml.jackson.dataformat.yaml.failing; + +import java.nio.charset.StandardCharsets; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.JsonToken; + +import com.fasterxml.jackson.dataformat.yaml.*; + +// [dataformats-text#497]: 3-byte UTF-8 character at end of content +public class UnicodeYAMLRead497Test extends ModuleTestBase +{ + private final YAMLMapper MAPPER = newObjectMapper(); + + // [dataformats-text#497] + public void testUnicodeAtEnd() throws Exception + { + // Had to find edge condition, these would do: + _testUnicodeAtEnd(1024); + _testUnicodeAtEnd(2048); + _testUnicodeAtEnd(3072); + _testUnicodeAtEnd(4096); + } + + void _testUnicodeAtEnd(int LEN) throws Exception + { + StringBuilder sb = new StringBuilder(LEN + 2); + sb.append("key: "); + StringBuilder valueBuffer = new StringBuilder(); + + while ((sb.length() + valueBuffer.length()) < LEN) { + valueBuffer.append('a'); + } + valueBuffer.append('\u5496'); + + sb.append(valueBuffer); + final byte[] doc = sb.toString().getBytes(StandardCharsets.UTF_8); + + try (JsonParser p = MAPPER.createParser(doc)) { + assertToken(JsonToken.START_OBJECT, p.nextToken()); + assertEquals("key", p.nextFieldName()); + assertToken(JsonToken.VALUE_STRING, p.nextToken()); + assertEquals(valueBuffer.toString(), p.getText()); + } + } +}