From c3e3694b9df3154f17796c23e027dc9d2ffc4c91 Mon Sep 17 00:00:00 2001 From: Divy Srivastava Date: Sun, 22 Jan 2023 01:34:18 -0800 Subject: fix(napi): correctly handle name in napi_create_function (#17489) Fixes https://github.com/denoland/deno/issues/17472 --- cli/napi/js_native_api.rs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'cli/napi/js_native_api.rs') 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(()) } -- cgit v1.2.3