]> git.kaiwu.me - njs.git/commitdiff
Fixed ArrayBuffer with detached buffers.
authorDmitry Volyntsev <xeioex@nginx.com>
Thu, 20 Nov 2025 23:07:07 +0000 (15:07 -0800)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 21 Nov 2025 22:08:11 +0000 (14:08 -0800)
src/njs_array_buffer.c
src/test/njs_unit_test.c

index 9f1ee49a1d93cb736d6ec23fa72d79831243d4ca..8a0703dc5aa2326e3830d6ce7ccd6a73ced25c1c 100644 (file)
@@ -179,8 +179,8 @@ njs_array_buffer_prototype_byte_length(njs_vm_t *vm, njs_value_t *args,
 
     array = njs_array_buffer(value);
     if (njs_slow_path(njs_is_detached_buffer(array))) {
-        njs_type_error(vm, "detached buffer");
-        return NJS_ERROR;
+        njs_set_number(retval, 0);
+        return NJS_OK;
     }
 
     njs_set_number(retval, array->size);
@@ -207,6 +207,11 @@ njs_array_buffer_prototype_slice(njs_vm_t *vm, njs_value_t *args,
     }
 
     this = njs_array_buffer(value);
+    if (njs_slow_path(njs_is_detached_buffer(this))) {
+        njs_type_error(vm, "detached buffer");
+        return NJS_ERROR;
+    }
+
     len  = njs_array_buffer_size(this);
     end  = len;
 
index e205ee2038ba855adb8f8ee2ff936301f99faf9a..c39523ac096d4e8d170c3078762d7d556d6d7e2f 100644 (file)
@@ -21574,9 +21574,9 @@ static njs_unit_test_t  njs_backtraces_test[] =
 
     { njs_str("var ab = new ArrayBuffer(1);"
               "$262.detachArrayBuffer(ab);"
-              "ab.byteLength"),
+              "ab.slice(0)"),
       njs_str("TypeError: detached buffer\n"
-              "    at ArrayBuffer.prototype.byteLength (native)\n"
+              "    at ArrayBuffer.prototype.slice (native)\n"
               "    at main (:1)\n") },
 
     { njs_str("Object.prototype()"),