From: Dmitry Volyntsev Date: Wed, 7 Aug 2019 14:23:47 +0000 (+0300) Subject: Fixed Object.defineProperty() for non-boolean descriptor props. X-Git-Url: http://git.kaiwu.me/postgresql/log/contrib/postgres_fdw/%7B@url%7D?a=commitdiff_plain;h=c9de3c329125775d0bf8747f9500434b409ad627;p=njs.git Fixed Object.defineProperty() for non-boolean descriptor props. --- diff --git a/src/njs_object_prop.c b/src/njs_object_prop.c index 157dc133..3e771138 100644 --- a/src/njs_object_prop.c +++ b/src/njs_object_prop.c @@ -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) { diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c index c609a050..3492f891 100644 --- a/src/test/njs_unit_test.c +++ b/src/test/njs_unit_test.c @@ -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") },