diff --git a/Libraries/LibJS/Runtime/JSONObject.cpp b/Libraries/LibJS/Runtime/JSONObject.cpp index aea0030a36..841565e5da 100644 --- a/Libraries/LibJS/Runtime/JSONObject.cpp +++ b/Libraries/LibJS/Runtime/JSONObject.cpp @@ -150,6 +150,8 @@ JS_DEFINE_NATIVE_FUNCTION(JSONObject::stringify) String JSONObject::serialize_json_property(Interpreter& interpreter, StringifyState& state, const PropertyName& key, Object* holder) { auto value = holder->get(key); + if (interpreter.exception()) + return {}; if (value.is_object()) { auto to_json = value.as_object().get("toJSON"); if (interpreter.exception()) diff --git a/Libraries/LibJS/Tests/builtins/JSON/JSON.stringify-exception-in-property-getter.js b/Libraries/LibJS/Tests/builtins/JSON/JSON.stringify-exception-in-property-getter.js new file mode 100644 index 0000000000..18845f842b --- /dev/null +++ b/Libraries/LibJS/Tests/builtins/JSON/JSON.stringify-exception-in-property-getter.js @@ -0,0 +1,10 @@ +test("Issue #3548, exception in property getter with replacer function", () => { + const o = { + get foo() { + throw Error(); + }, + }; + expect(() => { + JSON.stringify(o, (_, value) => value); + }).toThrow(Error); +});