summaryrefslogtreecommitdiff
path: root/cli/napi/js_native_api.rs
diff options
context:
space:
mode:
authorDivy Srivastava <dj.srivastava23@gmail.com>2023-01-22 01:34:18 -0800
committerGitHub <noreply@github.com>2023-01-22 15:04:18 +0530
commitc3e3694b9df3154f17796c23e027dc9d2ffc4c91 (patch)
tree7fdf48df9cf6a2731cc59cb72d07b0fc07fd2b85 /cli/napi/js_native_api.rs
parent59289255411b902588619fd7d2f6e3e48af11d82 (diff)
fix(napi): correctly handle name in napi_create_function (#17489)
Fixes https://github.com/denoland/deno/issues/17472
Diffstat (limited to 'cli/napi/js_native_api.rs')
-rw-r--r--cli/napi/js_native_api.rs16
1 files changed, 6 insertions, 10 deletions
diff --git a/cli/napi/js_native_api.rs b/cli/napi/js_native_api.rs
index 103a5f06a..c3f7d5da7 100644
--- a/cli/napi/js_native_api.rs
+++ b/cli/napi/js_native_api.rs
@@ -597,7 +597,7 @@ fn napi_create_external_buffer(
#[napi_sym::napi_sym]
fn napi_create_function(
env: *mut Env,
- name: *const u8,
+ name: *const c_char,
length: usize,
cb: napi_callback,
cb_info: napi_callback_info,
@@ -606,21 +606,17 @@ fn napi_create_function(
check_env!(env);
check_arg!(env, result);
check_arg_option!(env, cb);
- check_arg!(env, name);
if length > INT_MAX as _ {
return Err(Error::InvalidArg);
}
- let name = std::slice::from_raw_parts(name, length);
- // If it ends with NULL
- let name = if name[name.len() - 1] == 0 {
- std::str::from_utf8_unchecked(&name[0..name.len() - 1])
- } else {
- std::str::from_utf8_unchecked(name)
- };
+ let name = name
+ .as_ref()
+ .map(|_| check_new_from_utf8_len(env, name, length))
+ .transpose()?;
- *result = create_function(env, Some(name), cb, cb_info).into();
+ *result = create_function(env, name, cb, cb_info).into();
Ok(())
}