]> git.kaiwu.me - njs.git/commitdiff
Fixed Object.defineProperty() for non-boolean descriptor props.
authorDmitry Volyntsev <xeioex@nginx.com>
Wed, 7 Aug 2019 14:23:47 +0000 (17:23 +0300)
committerDmitry Volyntsev <xeioex@nginx.com>
Wed, 7 Aug 2019 14:23:47 +0000 (17:23 +0300)
src/njs_object_prop.c
src/test/njs_unit_test.c

index 157dc133eafb9cad08a75f25f9a541e1f5c0ee40..3e7711383909160ec7fdd2984f17618edb58be35 100644 (file)
@@ -378,7 +378,7 @@ njs_descriptor_prop(njs_vm_t *vm, const njs_value_t *name,
     pr = njs_object_property(vm, desc, &pq);
     if (pr != NULL) {
         data = 1;
-        prop->writable = pr->value.data.truth;
+        prop->writable = njs_is_true(&pr->value);
     }
 
     pq.key = njs_str_value("enumerable");
@@ -386,7 +386,7 @@ njs_descriptor_prop(njs_vm_t *vm, const njs_value_t *name,
 
     pr = njs_object_property(vm, desc, &pq);
     if (pr != NULL) {
-        prop->enumerable = pr->value.data.truth;
+        prop->enumerable = njs_is_true(&pr->value);
     }
 
     pq.key = njs_str_value("configurable");
@@ -394,7 +394,7 @@ njs_descriptor_prop(njs_vm_t *vm, const njs_value_t *name,
 
     pr = njs_object_property(vm, desc, &pq);
     if (pr != NULL) {
-        prop->configurable = pr->value.data.truth;
+        prop->configurable = njs_is_true(&pr->value);
     }
 
     if (accessor && data) {
index c609a05065901931c76da3b28b333cf3d22d1e5c..3492f891184235abe7fcefa866f0a488a268ccda 100644 (file)
@@ -9545,6 +9545,11 @@ static njs_unit_test_t  njs_test[] =
     { njs_str("var o = {}; Object.defineProperty(o, 'a', Object.create({value:1})); o.a"),
       njs_str("1") },
 
+    { njs_str("var o = {}; Object.defineProperty(o, 'a', {writable:'x', enumerable:'y', configurable:'z'});"
+              "var d = Object.getOwnPropertyDescriptor(o, 'a');"
+              "d.writable && d.enumerable && d.configurable"),
+      njs_str("true") },
+
     { njs_str("var o = {a:1, c:2}; Object.defineProperty(o, 'b', {});"
                  "Object.keys(o)"),
       njs_str("a,c") },