From cafa3158a325e6e3c2949d7cf61cd0e99cd8c680 Mon Sep 17 00:00:00 2001 From: Alec Murphy Date: Mon, 17 Feb 2025 13:23:16 -0500 Subject: [PATCH] System/Libraries/Json: Properly escape double-quotes when stringifying a string --- System/Libraries/Json.HC | 49 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/System/Libraries/Json.HC b/System/Libraries/Json.HC index c5f5d8d..2849e99 100644 --- a/System/Libraries/Json.HC +++ b/System/Libraries/Json.HC @@ -812,10 +812,57 @@ U0 @json_stringify_append_char(U8* str, U8 char) } } +U0 @json_stringify_append_char_escape_quotes(U8* str, U8 char) +{ + // FIXME: unicode + I64 len = StrLen(str); + switch (char) { + case '"': + str[len] = '\\'; + str[len + 1] = '"'; + str[len + 2] = NULL; + break; + case '\\': + str[len] = '\\'; + str[len + 1] = '\\'; + str[len + 2] = NULL; + break; + case 0x08: + str[len] = '\\'; + str[len + 1] = 'b'; + str[len + 2] = NULL; + break; + case 0x0c: + str[len] = '\\'; + str[len + 1] = 'f'; + str[len + 2] = NULL; + break; + case 0x0a: + str[len] = '\\'; + str[len + 1] = 'n'; + str[len + 2] = NULL; + break; + case 0x0d: + str[len] = '\\'; + str[len + 1] = 'r'; + str[len + 2] = NULL; + break; + case 0x09: + str[len] = '\\'; + str[len + 1] = 't'; + str[len + 2] = NULL; + break; + default: + str[len] = char; + str[len + 1] = NULL; + break; + } +} + U0 @json_stringify_append_str(U8* str, U8* str2) { while (*str2) { - @json_stringify_append_char(str, *str2); + @json_stringify_append_char_escape_quotes(str, *str2); str2++; } }