Skip to content

Commit

Permalink
fix(napi): CString issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Brooooooklyn committed Nov 18, 2020
1 parent 63a3e05 commit 3ac497b
Show file tree
Hide file tree
Showing 5 changed files with 12 additions and 16 deletions.
2 changes: 1 addition & 1 deletion napi-derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ fn get_execute_js_code(
Err(e) => {
let message = format!("{}", e);
unsafe {
napi::sys::napi_throw_error(raw_env, ptr::null(), CString::from_vec_unchecked(message.into()).as_ptr() as *const c_char);
napi::sys::napi_throw_error(raw_env, ptr::null(), CString::from_vec_unchecked(message.into()).into_raw());
}
ptr::null_mut()
}
Expand Down
8 changes: 2 additions & 6 deletions napi/src/env.rs
Original file line number Diff line number Diff line change
Expand Up @@ -349,7 +349,7 @@ impl Env {
check_status(unsafe {
sys::napi_create_function(
self.0,
name.as_ptr(),
name.into_raw(),
len,
Some(callback),
ptr::null_mut(),
Expand All @@ -368,11 +368,7 @@ impl Env {

pub fn throw_error(&self, msg: &str) -> Result<()> {
check_status(unsafe {
sys::napi_throw_error(
self.0,
ptr::null(),
CString::from_vec_unchecked(msg.into()).as_ptr() as *const _,
)
sys::napi_throw_error(self.0, ptr::null(), CString::new(msg)?.into_raw())
})
}

Expand Down
14 changes: 7 additions & 7 deletions napi/src/js_values/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -257,9 +257,9 @@ macro_rules! impl_object_methods {
where
T: NapiValue,
{
let key = CString::new(name.to_owned())?;
let key = CString::new(name)?;
check_status(unsafe {
sys::napi_set_named_property(self.0.env, self.0.value, key.as_ptr(), value.raw())
sys::napi_set_named_property(self.0.env, self.0.value, key.into_raw(), value.raw())
})
}
pub fn get_named_property<T>(&self, name: &str) -> Result<T>
Expand All @@ -269,7 +269,7 @@ macro_rules! impl_object_methods {
let key = CString::new(name)?;
let mut raw_value = ptr::null_mut();
check_status(unsafe {
sys::napi_get_named_property(self.0.env, self.0.value, key.as_ptr(), &mut raw_value)
sys::napi_get_named_property(self.0.env, self.0.value, key.into_raw(), &mut raw_value)
})?;
T::from_raw(self.0.env, raw_value)
}
Expand All @@ -280,7 +280,7 @@ macro_rules! impl_object_methods {
let mut result = false;
let key = CString::new(name.as_ref())?;
check_status(unsafe {
sys::napi_has_named_property(self.0.env, self.0.value, key.as_ptr(), &mut result)
sys::napi_has_named_property(self.0.env, self.0.value, key.into_raw(), &mut result)
})?;
Ok(result)
}
Expand All @@ -299,7 +299,7 @@ macro_rules! impl_object_methods {
let key_str = CString::new(name)?;
let mut js_key = ptr::null_mut();
check_status(unsafe {
sys::napi_create_string_utf8(self.0.env, key_str.as_ptr(), name.len() as _, &mut js_key)
sys::napi_create_string_utf8(self.0.env, key_str.into_raw(), name.len(), &mut js_key)
})?;
check_status(unsafe {
sys::napi_delete_property(self.0.env, self.0.value, js_key, &mut result)
Expand All @@ -311,7 +311,7 @@ macro_rules! impl_object_methods {
let string = CString::new(key)?;
let mut js_key = ptr::null_mut();
check_status(unsafe {
sys::napi_create_string_utf8(self.0.env, string.as_ptr(), key.len() as _, &mut js_key)
sys::napi_create_string_utf8(self.0.env, string.into_raw(), key.len(), &mut js_key)
})?;
check_status(unsafe {
sys::napi_has_own_property(self.0.env, self.0.value, js_key, &mut result)
Expand All @@ -333,7 +333,7 @@ macro_rules! impl_object_methods {
let mut js_key = ptr::null_mut();
let mut result = false;
check_status(unsafe {
sys::napi_create_string_utf8(self.0.env, string.as_ptr(), name.len() as _, &mut js_key)
sys::napi_create_string_utf8(self.0.env, string.into_raw(), name.len(), &mut js_key)
})?;
check_status(unsafe {
sys::napi_has_property(self.0.env, self.0.value, js_key, &mut result)
Expand Down
2 changes: 1 addition & 1 deletion napi/src/js_values/object_property.rs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ impl<'env> Property<'env> {
let string_value = CString::new(name)?;
let mut result = ptr::null_mut();
check_status(unsafe {
sys::napi_create_string_utf8(env.0, string_value.as_ptr(), name.len() as _, &mut result)
sys::napi_create_string_utf8(env.0, string_value.into_raw(), name.len(), &mut result)
})?;
Ok(Property {
name,
Expand Down
2 changes: 1 addition & 1 deletion napi/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ macro_rules! register_module {
raw_env,
ptr::null(),
CString::from_vec_unchecked(format!("Error initializing module: {}", e).into())
.as_ptr() as *const _,
.into_raw() as *const _,
)
};
ptr::null_mut()
Expand Down

1 comment on commit 3ac497b

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 3ac497b Previous: 63a3e05 Ratio
noop#napi-rs 56220346 ops/sec (±0.4%) 43819295 ops/sec (±1.54%) 0.78
noop#JavaScript 715747212 ops/sec (±0.16%) 714678823 ops/sec (±1.25%) 1.00
Plus number#napi-rs 13644296 ops/sec (±0.14%) 10997918 ops/sec (±1.71%) 0.81
Plus number#JavaScript 713655047 ops/sec (±0.28%) 708404076 ops/sec (±1.15%) 0.99
Async task#napi-rs 30991 ops/sec (±2.18%) 20097 ops/sec (±2.92%) 0.65

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.