From 2e1df623804fd580d236d89d7277a28d66d7dddb Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Mon, 23 Jan 2023 00:51:55 -0800 Subject: [PATCH] fix(napi): improve napi_detach_arraybuffer (#17499) --- cli/napi/js_native_api.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs index c3f7d5da7c..9f043ec94c 100644 --- a/cli/napi/js_native_api.rs +++ b/cli/napi/js_native_api.rs @@ -1497,10 +1497,21 @@ fn napi_delete_reference(env: *mut Env, _nref: napi_ref) -> Result { } #[napi_sym::napi_sym] -fn napi_detach_arraybuffer(_env: *mut Env, value: napi_value) -> Result { +fn napi_detach_arraybuffer(env: *mut Env, value: napi_value) -> Result { + check_env!(env); + let value = napi_value_unchecked(value); - let ab = v8::Local::::try_from(value).unwrap(); - ab.detach(None); + let ab = v8::Local::::try_from(value) + .map_err(|_| Error::ArrayBufferExpected)?; + + if !ab.is_detachable() { + return Err(Error::DetachableArraybufferExpected); + } + + // Expected to crash for None. + ab.detach(None).unwrap(); + + napi_clear_last_error(env); Ok(()) }