Mercurial > njs
changeset 2595:24acf4bf0455
Fixed property set for objects with a TypedArray in prototype.
The issue was introduced in 2f288a9c.
| author | Dmitry Volyntsev <xeioex@nginx.com> |
|---|---|
| date | Thu, 10 Jul 2025 10:40:05 -0700 |
| parents | a92e5fa64acd |
| children | 099544ed0c4a |
| files | src/njs_object.h src/test/njs_unit_test.c |
| diffstat | 2 files changed, 10 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/njs_object.h Fri Jun 06 16:52:57 2025 -0700 +++ b/src/njs_object.h Thu Jul 10 10:40:05 2025 -0700 @@ -123,9 +123,10 @@ 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; }
--- a/src/test/njs_unit_test.c Fri Jun 06 16:52:57 2025 -0700 +++ b/src/test/njs_unit_test.c Thu Jul 10 10:40:05 2025 -0700 @@ -5909,6 +5909,12 @@ 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\"'}})"), njs_str("true") },
