Correctly release wrapper object in JSON stringify (#4361)

When an error occurs accessing a property during JSON stringify call
the wrapper object is not freed at the correct place.

JerryScript-DCO-1.0-Signed-off-by: Peter Gal pgal.usz@partner.samsung.com
This commit is contained in:
Péter Gál 2020-12-15 11:18:14 +01:00 committed by GitHub
parent fe216d4710
commit 035e5a27fa
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 0 deletions

View File

@ -1268,6 +1268,7 @@ ecma_builtin_json_serialize_property (ecma_json_stringify_context_t *context_p,
if (ECMA_IS_VALUE_ERROR (to_json))
{
ecma_free_value (value);
return to_json;
}

View File

@ -51,3 +51,14 @@ try {
assert(JSON.stringify("ab𬄕c") === '"ab𬄕\\u001fc"');
assert(JSON.stringify("ab\uDC01cd") === '"ab\\udc01c\\u001fd"');
assert(JSON.stringify("ab\uDC01cd\uD8331e") === '"ab\\udc01c\\u001fd\\ud8331e"');
// Test case where the proxy is already revoked
var handle = Proxy.revocable([], {});
handle.revoke();
try {
JSON.stringify(handle.proxy);
assert(false);
} catch (ex) {
assert(ex instanceof TypeError);
}