]> git.kaiwu.me - njs.git/commitdiff
Respecting writable attribute for property handlers.
authorDmitry Volyntsev <xeioex@nginx.com>
Mon, 27 Aug 2018 13:37:42 +0000 (16:37 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Mon, 27 Aug 2018 13:37:42 +0000 (16:37 +0300)
njs/njs_vm.c
njs/test/njs_unit_test.c

index 60ccacb3a5bb12843916d92fc9e37100a0d86dff..7ca111106f12dbf514e35942c6fb314c5297b3c9 100644 (file)
@@ -656,7 +656,7 @@ njs_vmcode_property_set(njs_vm_t *vm, njs_value_t *object,
     case NXT_OK:
         prop = pq.lhq.value;
 
-        if (prop->type == NJS_PROPERTY_HANDLER) {
+        if (prop->type == NJS_PROPERTY_HANDLER && prop->writable) {
             ret = prop->value.data.u.prop_handler(vm, object, value,
                                                   &vm->retval);
             if (nxt_slow_path(ret != NXT_OK)) {
index 51d85632cb3d7331d903eb5b732d5ebd627701ca..110ac75025fe476599d543964e26a6313d129d38 100644 (file)
@@ -6065,10 +6065,7 @@ static njs_unit_test_t  njs_test[] =
       nxt_string("true") },
 
     { nxt_string("({}).__proto__ = 1"),
-      nxt_string("1") },
-
-    { nxt_string("var o = {}; o.__proto__ = 1; o.__proto__"),
-      nxt_string("[object Object]") },
+      nxt_string("TypeError: Cannot assign to read-only property '__proto__' of object") },
 
     { nxt_string("({}).__proto__.constructor === Object"),
       nxt_string("true") },