From c80fad0cdc46e2455244c43eb04ae9ea4ceb8c9f Mon Sep 17 00:00:00 2001 From: Dmitry Volyntsev Date: Thu, 25 Apr 2019 15:19:36 +0300 Subject: [PATCH] Fixed string object creation using Object() constructor. --- njs/njs_object.c | 9 ++++++++- njs/njs_string.c | 2 -- njs/test/njs_unit_test.c | 3 +++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/njs/njs_object.c b/njs/njs_object.c index 8e47f795..8526dda3 100644 --- a/njs/njs_object.c +++ b/njs/njs_object.c @@ -107,7 +107,14 @@ njs_object_value_alloc(njs_vm_t *vm, const njs_value_t *value, nxt_uint_t type) if (nxt_fast_path(ov != NULL)) { nxt_lvlhsh_init(&ov->object.hash); - nxt_lvlhsh_init(&ov->object.shared_hash); + + if (type == NJS_STRING) { + ov->object.shared_hash = vm->shared->string_instance_hash; + + } else { + nxt_lvlhsh_init(&ov->object.shared_hash); + } + ov->object.type = njs_object_value_type(type); ov->object.shared = 0; ov->object.extensible = 1; diff --git a/njs/njs_string.c b/njs/njs_string.c index e20a9207..1a483c25 100644 --- a/njs/njs_string.c +++ b/njs/njs_string.c @@ -555,8 +555,6 @@ njs_string_constructor(njs_vm_t *vm, njs_value_t *args, nxt_uint_t nargs, return NXT_ERROR; } - object->shared_hash = vm->shared->string_instance_hash; - vm->retval.data.u.object = object; vm->retval.type = NJS_OBJECT_STRING; vm->retval.data.truth = 1; diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index 663ac55f..7bd183dd 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -8437,6 +8437,9 @@ static njs_unit_test_t njs_test[] = { nxt_string("new String(123)"), nxt_string("123") }, + { nxt_string("Object('123').length"), + nxt_string("3") }, + { nxt_string("new String(123).length"), nxt_string("3") }, -- 2.47.3