Fix free of NULL value in function ecma_typedarray_helper_dispatch_construct (#4473)

Currently, ecma_op_get_prototype_from_constructor may return NULL
and the function didn't raise that exception.
Also optimize multiple assignment of prototype_obj_p and
multiple access of JERRY_CONTEXT (current_new_target) out.

This fixes https://github.com/jerryscript-project/jerryscript/issues/4463

JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo luoyonggang@gmail.com
This commit is contained in:
Yonggang Luo
2021-01-18 01:35:47 -08:00
committed by GitHub
parent f894a8fad5
commit 90d206dcee
3 changed files with 63 additions and 14 deletions
@@ -40,11 +40,20 @@ ecma_typedarray_helper_dispatch_construct (const ecma_value_t *arguments_list_p,
{
JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL);
ecma_builtin_id_t proto_id = ecma_typedarray_helper_get_prototype_id (typedarray_id);
ecma_object_t *prototype_obj_p = ecma_builtin_get (proto_id);
ecma_object_t *prototype_obj_p = NULL;
ecma_object_t *current_new_target_p = JERRY_CONTEXT (current_new_target_p);
if (JERRY_CONTEXT (current_new_target_p))
if (current_new_target_p != NULL)
{
prototype_obj_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target_p), proto_id);
prototype_obj_p = ecma_op_get_prototype_from_constructor (current_new_target_p, proto_id);
if (prototype_obj_p == NULL)
{
return ECMA_VALUE_ERROR;
}
}
else
{
prototype_obj_p = ecma_builtin_get (proto_id);
}
ecma_value_t val = ecma_op_create_typedarray (arguments_list_p,
@@ -53,7 +62,7 @@ ecma_typedarray_helper_dispatch_construct (const ecma_value_t *arguments_list_p,
ecma_typedarray_helper_get_shift_size (typedarray_id),
typedarray_id);
if (JERRY_CONTEXT (current_new_target_p))
if (current_new_target_p != NULL)
{
ecma_deref_object (prototype_obj_p);
}