mirror of
https://github.com/RGBCube/serenity
synced 2025-05-31 02:58:12 +00:00
LibJS: Handle getter exception in JSONObject::serialize_json_property()
In the case of an exception in a property getter function we would not return early, and a subsequent attempt to call the replacer function would crash the interpreter due to call_internal() asserting. Fixes #3548.
This commit is contained in:
parent
e1965a5a8e
commit
c0e4353bde
2 changed files with 12 additions and 0 deletions
|
@ -150,6 +150,8 @@ JS_DEFINE_NATIVE_FUNCTION(JSONObject::stringify)
|
||||||
String JSONObject::serialize_json_property(Interpreter& interpreter, StringifyState& state, const PropertyName& key, Object* holder)
|
String JSONObject::serialize_json_property(Interpreter& interpreter, StringifyState& state, const PropertyName& key, Object* holder)
|
||||||
{
|
{
|
||||||
auto value = holder->get(key);
|
auto value = holder->get(key);
|
||||||
|
if (interpreter.exception())
|
||||||
|
return {};
|
||||||
if (value.is_object()) {
|
if (value.is_object()) {
|
||||||
auto to_json = value.as_object().get("toJSON");
|
auto to_json = value.as_object().get("toJSON");
|
||||||
if (interpreter.exception())
|
if (interpreter.exception())
|
||||||
|
|
|
@ -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);
|
||||||
|
});
|
Loading…
Add table
Add a link
Reference in a new issue