From 3b85d556a44a34cd1ac32c18ee2e4279c7d47402 Mon Sep 17 00:00:00 2001 From: Patrick Pilch <2015295+patrickpilch@users.noreply.github.com> Date: Thu, 15 Dec 2022 19:30:36 -0600 Subject: [PATCH] fix(napi): napi_create_async_work incorrect argument (napi-rs#1392) The third argument to `napi_create_async_work` (async_resource_name) should be a `napi_value` that corresponds to a null-terminated utf-8 string. This resolves errors running Next.js with GraalVM. oracle/graal#5582 oracle/graal#5581 Signed-off-by: Patrick Pilch <2015295+patrickpilch@users.noreply.github.com> --- crates/napi/src/async_work.rs | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/crates/napi/src/async_work.rs b/crates/napi/src/async_work.rs index 7bd123d597..49a26bb6dc 100644 --- a/crates/napi/src/async_work.rs +++ b/crates/napi/src/async_work.rs @@ -1,4 +1,4 @@ -use std::ffi::CStr; +use std::ffi::CString; use std::mem; use std::os::raw::c_void; use std::ptr; @@ -60,12 +60,18 @@ pub fn run( napi_async_work: ptr::null_mut(), status: task_status.clone(), })); - let async_work_name = unsafe { CStr::from_bytes_with_nul_unchecked(b"napi_rs_async_work\0") }; + let mut async_work_name = ptr::null_mut(); + let s = "napi_rs_async_work"; + let len = s.len(); + let s = CString::new(s)?; + check_status!(unsafe { + sys::napi_create_string_utf8(env, s.as_ptr(), len, &mut async_work_name) + })?; check_status!(unsafe { sys::napi_create_async_work( env, raw_resource, - async_work_name.as_ptr() as *mut _, + async_work_name, Some(execute:: as unsafe extern "C" fn(env: sys::napi_env, data: *mut c_void)), Some( complete::