]> git.kaiwu.me - njs.git/commitdiff
Fixed property set for objects with a TypedArray in prototype.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 10 Jul 2025 17:40:05 +0000 (10:40 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Thu, 10 Jul 2025 18:14:09 +0000 (11:14 -0700)
The issue was introduced in 2f288a9c.

src/njs_object.h
src/test/njs_unit_test.c

index fac49aa8407190d13de6ba1c2ae386b05786719b..dd5334d23467a9b733cc3388cf8ba3dfca76b85f 100644 (file)
@@ -123,9 +123,10 @@ njs_inline njs_bool_t
 njs_is_data_descriptor(njs_object_prop_t *prop)
 {
     return (prop->type == NJS_PROPERTY && njs_is_valid(njs_prop_value(prop)))
-           || prop->type == NJS_PROPERTY_REF
-           || prop->type == NJS_PROPERTY_PLACE_REF
-           || prop->type == NJS_PROPERTY_HANDLER;
+            || prop->type == NJS_PROPERTY_HANDLER
+            || prop->type == NJS_PROPERTY_REF
+            || prop->type == NJS_PROPERTY_PLACE_REF
+            || prop->type == NJS_PROPERTY_TYPED_ARRAY_REF;
 }
 
 
index fd98dbb54d4f1ff299b8b91b4216627cb6d02023..78e12197508464c796853ea658322cc25f5e77aa 100644 (file)
@@ -5908,6 +5908,12 @@ static njs_unit_test_t  njs_test[] =
               "           catch (e) { return e.message == 'Cannot redefine property: \"1\"'}})"),
       njs_str("true") },
 
+    { njs_str(NJS_TYPED_ARRAY_LIST
+              ".every(v=>{Object.defineProperty(v.prototype, '0', {set(){ throw 'Oops' }});"
+              "           var t = new v([0]); var r = Object.create(t);"
+              "           r[0] = 1; return true})"),
+      njs_str("true") },
+
     { njs_str(NJS_TYPED_ARRAY_LIST
               ".every(v=>{try {var a = new v([1,1]); Object.defineProperty(a, '1', {get(){return 22}})} "
               "           catch (e) { return e.message == 'Cannot redefine property: \"1\"'}})"),