Skip to content

Commit

Permalink
fix(napi): correctly handle name in napi_create_function (denoland#17489
Browse files Browse the repository at this point in the history
  • Loading branch information
littledivy committed Jan 22, 2023
1 parent 5928925 commit c3e3694
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 13 deletions.
16 changes: 6 additions & 10 deletions cli/napi/js_native_api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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(())
}

Expand Down
5 changes: 2 additions & 3 deletions ext/napi/function.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ extern "C" fn call_fn(info: *const v8::FunctionCallbackInfo) {
#[allow(clippy::not_unsafe_ptr_arg_deref)]
pub fn create_function<'a>(
env_ptr: *mut Env,
name: Option<&str>,
name: Option<v8::Local<v8::String>>,
cb: napi_callback,
cb_info: napi_callback_info,
) -> v8::Local<'a, v8::Function> {
Expand All @@ -67,8 +67,7 @@ pub fn create_function<'a>(
.build(scope)
.unwrap();

if let Some(name) = name {
let v8str = v8::String::new(scope, name).unwrap();
if let Some(v8str) = name {
function.set_name(v8str);
}

Expand Down

0 comments on commit c3e3694

Please sign in to comment.