[njs] Fixed property set for objects with a TypedArray in prototype.
noreply at nginx.com
noreply at nginx.com
Thu Jul 10 18:15:02 UTC 2025
details: https://github.com/nginx/njs/commit/941c1f9c09487bdb8328624e06deeb9519083e62
branches: master
commit: 941c1f9c09487bdb8328624e06deeb9519083e62
user: Dmitry Volyntsev <xeioex at nginx.com>
date: Thu, 10 Jul 2025 10:40:05 -0700
description:
Fixed property set for objects with a TypedArray in prototype.
The issue was introduced in 2f288a9c.
---
src/njs_object.h | 7 ++++---
src/test/njs_unit_test.c | 6 ++++++
2 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/src/njs_object.h b/src/njs_object.h
index fac49aa8..dd5334d2 100644
--- a/src/njs_object.h
+++ b/src/njs_object.h
@@ -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;
}
diff --git a/src/test/njs_unit_test.c b/src/test/njs_unit_test.c
index fd98dbb5..78e12197 100644
--- a/src/test/njs_unit_test.c
+++ b/src/test/njs_unit_test.c
@@ -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\"'}})"),
More information about the nginx-devel
mailing list