From 301ab784f805c985fdfd89221d852af2f292ac08 Mon Sep 17 00:00:00 2001 From: "Kamat, Trivikram" <16024985+trivikr@users.noreply.github.com> Date: Thu, 6 Aug 2026 07:54:35 -0700 Subject: [PATCH] ffi: clarify detached ArrayBuffer error Report that the ArrayBuffer is detached instead of describing its backing store as invalid. Signed-off-by: Kamat, Trivikram <16024985+trivikr@users.noreply.github.com> --- src/ffi/data.cc | 2 +- test/ffi/test-ffi-memory.js | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ffi/data.cc b/src/ffi/data.cc index 73b575395c8c..6098d3542ab5 100644 --- a/src/ffi/data.cc +++ b/src/ffi/data.cc @@ -685,7 +685,7 @@ void ExportBytes(const FunctionCallbackInfo& args) { args[0]->IsArrayBufferView()) { view.ReadValue(args[0]); if (view.WasDetached()) { - THROW_ERR_INVALID_ARG_VALUE(env, "Invalid ArrayBufferView backing store"); + THROW_ERR_INVALID_ARG_VALUE(env, "ArrayBuffer is detached"); return; } } else { diff --git a/test/ffi/test-ffi-memory.js b/test/ffi/test-ffi-memory.js index f17f56c410f8..1f2334dddf90 100644 --- a/test/ffi/test-ffi-memory.js +++ b/test/ffi/test-ffi-memory.js @@ -251,6 +251,12 @@ test('ffi validates memory access arguments', () => { assert.throws(() => ffi.exportArrayBufferView('bad', ptr, 4), { code: 'ERR_INVALID_ARG_TYPE' }); assert.throws(() => ffi.exportArrayBufferView(new Uint8Array([1]), ptr, -1), { code: 'ERR_OUT_OF_RANGE' }); assert.throws(() => ffi.exportArrayBufferView(new Uint8Array([1, 2]), ptr, 1), { code: 'ERR_OUT_OF_RANGE' }); + const detachedArrayBuffer = new ArrayBuffer(2); + structuredClone(detachedArrayBuffer, { transfer: [detachedArrayBuffer] }); + assert.throws(() => ffi.exportArrayBuffer(detachedArrayBuffer, ptr, 2), { + code: 'ERR_INVALID_ARG_VALUE', + message: /ArrayBuffer is detached/, + }); assert.throws(() => ffi.toBuffer(maxPointer, 8), /pointer and length exceed the platform address range/); assert.throws(() => ffi.toArrayBuffer(maxPointer, 8), /pointer and length exceed the platform address range/); assert.throws(() => ffi.toBuffer(1n, bufferConstants.MAX_LENGTH + 1), { code: 'ERR_BUFFER_TOO_LARGE' });