diff --git a/AK/JsonParser.cpp b/AK/JsonParser.cpp index 9d604fa2a8..7960a14cfe 100644 --- a/AK/JsonParser.cpp +++ b/AK/JsonParser.cpp @@ -92,7 +92,18 @@ String JsonParser::consume_quoted_string() } } consume_specific('"'); - return String::copy(buffer); + + if (buffer.is_empty()) + return {}; + + auto& last_string_starting_with_character = m_last_string_starting_with_character[buffer.first()]; + if (last_string_starting_with_character.length() == buffer.size()) { + if (!memcmp(last_string_starting_with_character.characters(), buffer.data(), buffer.size())) + return last_string_starting_with_character; + } + + last_string_starting_with_character = String::copy(buffer); + return last_string_starting_with_character; } JsonObject JsonParser::parse_object() diff --git a/AK/JsonParser.h b/AK/JsonParser.h index 343530d7f4..26756abf36 100644 --- a/AK/JsonParser.h +++ b/AK/JsonParser.h @@ -40,6 +40,8 @@ private: StringView m_input; int m_index { 0 }; + + String m_last_string_starting_with_character[256]; }; }