summaryrefslogtreecommitdiff
path: root/cli/napi
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-01-23 00:51:55 -0800
committerGitHub <noreply@github.com>2023-01-23 14:21:55 +0530
commit2e1df623804fd580d236d89d7277a28d66d7dddb (patch)
tree32abc2a22877e9298158134b67a23b9b8e5d00a2 /cli/napi
parentc3e3694b9df3154f17796c23e027dc9d2ffc4c91 (diff)
fix(napi): improve napi_detach_arraybuffer (#17499)
Diffstat (limited to 'cli/napi')
-rw-r--r--cli/napi/js_native_api.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs
index c3f7d5da7..9f043ec94 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::<v8::ArrayBuffer>::try_from(value).unwrap();
- ab.detach(None);
+ let ab = v8::Local::<v8::ArrayBuffer>::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(())
}