From 813636e7af1b622c69223f2a63969ee2074deb9c Mon Sep 17 00:00:00 2001 From: Fabrice Bellard Date: Mon, 9 Nov 2026 15:19:15 +0100 Subject: [PATCH] fixed duplicate Invocation of the ArrayBuffer Release Callback (Divy Srivastava, #606) --- quickjs.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/quickjs.c b/quickjs.c index 788c8f8..9c67217 100644 --- a/quickjs.c +++ b/quickjs.c @@ -60994,8 +60994,13 @@ void JS_DetachArrayBuffer(JSContext *ctx, JSValueConst obj) if (!abuf || abuf->detached) return; - if (abuf->free_func) + if (abuf->free_func) { abuf->free_func(ctx->rt, abuf->opaque, abuf->data); + /* The backing data has been released. Do not release it again when + the detached ArrayBuffer object is later finalized. */ + abuf->free_func = NULL; + abuf->opaque = NULL; + } abuf->data = NULL; abuf->byte_length = 0; abuf->detached = TRUE; @@ -61160,6 +61165,8 @@ static JSValue js_array_buffer_transfer(JSContext *ctx, abuf->data = NULL; abuf->byte_length = 0; abuf->detached = TRUE; + abuf->free_func = NULL; + abuf->opaque = NULL; js_array_buffer_update_typed_arrays(abuf); } if (magic == JS_ARRAY_BUFFER_TRANSFER_TO_IMMUTABLE && !JS_IsException(res)) { -- 2.47.3