From 821484f170000e68114285b538c563be9858d119 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 29 Dec 2019 22:18:45 +0100 Subject: [PATCH] AK: Fix JSON parser crashing when encountering UTF-8 The mechanism that caches the most recently seen string for each first character was indexing into the cache using a 'char' subscript. Oops! --- AK/JsonParser.cpp | 2 +- AK/Tests/TestJSON.cpp | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/AK/JsonParser.cpp b/AK/JsonParser.cpp index 774def6e4c..5c634f27de 100644 --- a/AK/JsonParser.cpp +++ b/AK/JsonParser.cpp @@ -103,7 +103,7 @@ String JsonParser::consume_quoted_string() if (buffer.is_empty()) return String::empty(); - auto& last_string_starting_with_character = m_last_string_starting_with_character[(int)buffer.first()]; + auto& last_string_starting_with_character = m_last_string_starting_with_character[(u8)buffer.first()]; if (last_string_starting_with_character.length() == (size_t)buffer.size()) { if (!memcmp(last_string_starting_with_character.characters(), buffer.data(), buffer.size())) return last_string_starting_with_character; diff --git a/AK/Tests/TestJSON.cpp b/AK/Tests/TestJSON.cpp index bbdfd25817..e532040c4d 100644 --- a/AK/Tests/TestJSON.cpp +++ b/AK/Tests/TestJSON.cpp @@ -74,4 +74,12 @@ TEST_CASE(json_empty_string) EXPECT_EQ(json.as_string().is_empty(), true); } +TEST_CASE(json_utf8_character) +{ + auto json = JsonValue::from_string("\"\xc3\x84\""); + EXPECT_EQ(json.type(), JsonValue::Type::String); + EXPECT_EQ(json.as_string().is_null(), false); + EXPECT_EQ(json.as_string().length(), 2); +} + TEST_MAIN(JSON)