Fix memory leak in ecma_op_object_get_enumerable_property_names (#4136)

JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác csaba.osztrogonac@h-lab.eu
This commit is contained in:
Csaba Osztrogonác 2020-08-13 13:46:50 +02:00 committed by GitHub
parent ea07052869
commit 409ead7415
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 6 deletions

View File

@ -1934,8 +1934,10 @@ ecma_op_object_get_enumerable_property_names (ecma_object_t *obj_p, /**< routine
return NULL;
}
const bool is_enumerable = (prop_desc.flags & ECMA_PROP_IS_ENUMERABLE) != 0;
ecma_free_property_descriptor (&prop_desc);
/* 4.a.ii */
if ((prop_desc.flags & ECMA_PROP_IS_ENUMERABLE) != 0)
if (is_enumerable)
{
/* 4.a.ii.1 */
if (option == ECMA_ENUMERABLE_PROPERTY_KEYS)
@ -1976,11 +1978,6 @@ ecma_op_object_get_enumerable_property_names (ecma_object_t *obj_p, /**< routine
}
}
}
if (ecma_is_value_true (status))
{
ecma_free_property_descriptor (&prop_desc);
}
}
}

View File

@ -132,3 +132,15 @@ assert(entries[0][0] === "b");
assert(entries[0][1] === "bar");
assert(handlers.length === 3);
assert(handlers.toString() === "D,D,G");
// exception during enumeration
var obj = {
get a() { throw "error" },
get b() { throw "shouldn't run" }
};
try {
Object.entries(obj);
} catch (err) {
assert(err == "error")
}

View File

@ -125,3 +125,15 @@ assert(values.length === 1);
assert(values[0] === "bar")
assert(handlers.length === 3);
assert(handlers.toString() === "D,D,G");
// exception during enumeration
var obj = {
get a() { throw "error" },
get b() { throw "shouldn't run" }
};
try {
Object.values(obj);
} catch (err) {
assert(err == "error")
}