Skip to content

Commit

Permalink
Fix free of NULL value in function ecma_typedarray_helper_dispatch_co…
Browse files Browse the repository at this point in the history
…nstruct

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 the esnext
/built-ins/TypedArray/prototype/subarray/* tests in debug build

JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo luoyonggang@gmail.com
  • Loading branch information
lygstate committed Jan 15, 2021
1 parent ba13624 commit eb1a0b9
Showing 1 changed file with 13 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "ecma-builtins.h"
#include "ecma-gc.h"
#include "ecma-objects.h"
#include "ecma-exceptions.h"
#include "ecma-typedarray-object.h"
#include "ecma-function-object.h"
#include "jcontext.h"
Expand All @@ -40,11 +41,19 @@ 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 *current_new_target = JERRY_CONTEXT (current_new_target);
ecma_object_t *prototype_obj_p;

if (JERRY_CONTEXT (current_new_target))
if (current_new_target)
{
prototype_obj_p = ecma_op_get_prototype_from_constructor (JERRY_CONTEXT (current_new_target), proto_id);
prototype_obj_p = ecma_op_get_prototype_from_constructor (current_new_target, proto_id);
if (prototype_obj_p == NULL) {
return ecma_raise_type_error (ECMA_ERR_MSG ("TypedArray should have prototype"));
}
}
else
{
prototype_obj_p = ecma_builtin_get (proto_id);
}

ecma_value_t val = ecma_op_create_typedarray (arguments_list_p,
Expand All @@ -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))
if (current_new_target)
{
ecma_deref_object (prototype_obj_p);
}
Expand Down

0 comments on commit eb1a0b9

Please sign in to comment.