From 9da8c781336bf773705530646c20969df1dc4b36 Mon Sep 17 00:00:00 2001 From: Idan Horowitz Date: Thu, 24 Feb 2022 19:15:31 +0200 Subject: [PATCH] AK: Add a try variant of StringBuilder::append_escaped_for_json This will allow us to make a fallible version of the JSON serializers. --- AK/StringBuilder.cpp | 20 +++++++++++++------- AK/StringBuilder.h | 1 + 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/AK/StringBuilder.cpp b/AK/StringBuilder.cpp index e537e57c19..58460911f7 100644 --- a/AK/StringBuilder.cpp +++ b/AK/StringBuilder.cpp @@ -171,31 +171,37 @@ void StringBuilder::append_as_lowercase(char ch) } void StringBuilder::append_escaped_for_json(StringView string) +{ + MUST(try_append_escaped_for_json(string)); +} + +ErrorOr StringBuilder::try_append_escaped_for_json(StringView string) { for (auto ch : string) { switch (ch) { case '\b': - append("\\b"); + TRY(try_append("\\b")); break; case '\n': - append("\\n"); + TRY(try_append("\\n")); break; case '\t': - append("\\t"); + TRY(try_append("\\t")); break; case '\"': - append("\\\""); + TRY(try_append("\\\"")); break; case '\\': - append("\\\\"); + TRY(try_append("\\\\")); break; default: if (ch >= 0 && ch <= 0x1f) - appendff("\\u{:04x}", ch); + TRY(try_appendff("\\u{:04x}", ch)); else - append(ch); + TRY(try_append(ch)); } } + return {}; } } diff --git a/AK/StringBuilder.h b/AK/StringBuilder.h index 869c20446c..9021e79eec 100644 --- a/AK/StringBuilder.h +++ b/AK/StringBuilder.h @@ -35,6 +35,7 @@ public: return vformat(*this, fmtstr.view(), variadic_format_params); } ErrorOr try_append(char const*, size_t); + ErrorOr try_append_escaped_for_json(StringView); void append(StringView); #ifndef KERNEL