From 653516b259c95ab53ee9ec830fd8d6eb67a9e76e Mon Sep 17 00:00:00 2001 From: Alexander Borisov Date: Wed, 11 Sep 2019 19:46:30 +0300 Subject: [PATCH] Fixed handing of accessor descriptors in Object.freeze(). This closes #211 issue on GitHub. --- src/njs_object.c | 5 ++++- src/test/njs_unit_test.c | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/njs_object.c b/src/njs_object.c index e09d1e13..961ba1f7 100644 --- a/src/njs_object.c +++ b/src/njs_object.c @@ -1345,7 +1345,10 @@ njs_object_freeze(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs, break; } - prop->writable = 0; + if (!njs_is_accessor_descriptor(prop)) { + prop->writable = 0; + } + prop->configurable = 0; } diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index eabcd836..7aa4638d 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -10849,6 +10849,17 @@ static njs_unit_test_t njs_test[] = { njs_str("var r = Object.freeze(new RegExp('')); r.a = 1"), njs_str("TypeError: Cannot add property \"a\", object is not extensible") }, + { njs_str("var o = Object.freeze({ get x() { return 10; } }); o.x"), + njs_str("10") }, + + { njs_str("var o = Object.freeze({ get x() { return 10; } });" + "Object.getOwnPropertyDescriptors(o).x.get"), + njs_str("[object Function]") }, + + { njs_str("var o = Object.freeze({ get x() { return 10; } });" + "Object.getOwnPropertyDescriptor(o, 'x').writable"), + njs_str("undefined") }, + { njs_str("Object.isFrozen({a:1})"), njs_str("false") }, -- 2.47.3