AK: Treat empty string as invalid JSON

Previously we would treat the empty string as `null`. This caused
JavaScript like this to fail:
```js
var object = {};
try {
    object = JSON.parse("");
} catch {}
var array = object.array || [];
```
Since `JSON.parse("")` returned null instead of throwing, it would set
`object` to null and then try and use it instead of using the default
backup value.
This commit is contained in:
Luke Wilde 2022-07-10 21:37:28 +01:00 committed by Linus Groh
parent 36c3a0fac2
commit da25ac0d48
3 changed files with 2 additions and 3 deletions

View file

@ -236,8 +236,6 @@ void JsonValue::clear()
#ifndef KERNEL
ErrorOr<JsonValue> JsonValue::from_string(StringView input)
{
if (input.is_empty())
return JsonValue();
return JsonParser(input).parse();
}
#endif

View file

@ -126,7 +126,7 @@ TEST_CASE(json_u64_roundtrip)
TEST_CASE(json_parse_empty_string)
{
auto value = JsonValue::from_string("");
EXPECT_EQ(value.value().is_null(), true);
EXPECT_EQ(value.is_error(), true);
}
TEST_CASE(json_parse_long_decimals)

View file

@ -29,6 +29,7 @@ test("syntax errors", () => {
"[1,2,3, ]",
'{ "foo": "bar",}',
'{ "foo": "bar", }',
"",
].forEach(test => {
expect(() => {
JSON.parse(test);