fix(napi): use null pointer for empty buffers
This commit is contained in:
parent
581e3bbb87
commit
39e55a39c9
3 changed files with 48 additions and 6 deletions
|
@ -180,7 +180,14 @@ macro_rules! impl_typed_array {
|
||||||
unsafe {
|
unsafe {
|
||||||
sys::napi_create_external_arraybuffer(
|
sys::napi_create_external_arraybuffer(
|
||||||
env,
|
env,
|
||||||
val.data as *mut c_void,
|
if length == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
val.data as *mut c_void
|
||||||
|
},
|
||||||
length,
|
length,
|
||||||
Some(finalizer::<$rust_type>),
|
Some(finalizer::<$rust_type>),
|
||||||
hint_ptr as *mut c_void,
|
hint_ptr as *mut c_void,
|
||||||
|
|
|
@ -176,7 +176,14 @@ impl ToNapiValue for Buffer {
|
||||||
sys::napi_create_external_buffer(
|
sys::napi_create_external_buffer(
|
||||||
env,
|
env,
|
||||||
len,
|
len,
|
||||||
val.inner.as_mut_ptr() as *mut _,
|
if len == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
val.inner.as_mut_ptr() as *mut _
|
||||||
|
},
|
||||||
Some(drop_buffer),
|
Some(drop_buffer),
|
||||||
Box::into_raw(Box::new((len, val.capacity))) as *mut _,
|
Box::into_raw(Box::new((len, val.capacity))) as *mut _,
|
||||||
&mut ret,
|
&mut ret,
|
||||||
|
|
|
@ -264,7 +264,14 @@ impl Env {
|
||||||
sys::napi_create_external_buffer(
|
sys::napi_create_external_buffer(
|
||||||
self.0,
|
self.0,
|
||||||
length,
|
length,
|
||||||
data_ptr as *mut c_void,
|
if length == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
data_ptr as *mut c_void
|
||||||
|
},
|
||||||
Some(drop_buffer),
|
Some(drop_buffer),
|
||||||
Box::into_raw(Box::new((length, data.capacity()))) as *mut c_void,
|
Box::into_raw(Box::new((length, data.capacity()))) as *mut c_void,
|
||||||
&mut raw_value,
|
&mut raw_value,
|
||||||
|
@ -301,7 +308,14 @@ impl Env {
|
||||||
sys::napi_create_external_buffer(
|
sys::napi_create_external_buffer(
|
||||||
self.0,
|
self.0,
|
||||||
length,
|
length,
|
||||||
data as *mut c_void,
|
if length == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
data as *mut c_void
|
||||||
|
},
|
||||||
Some(
|
Some(
|
||||||
raw_finalize_with_custom_callback::<Hint, Finalize>
|
raw_finalize_with_custom_callback::<Hint, Finalize>
|
||||||
as unsafe extern "C" fn(
|
as unsafe extern "C" fn(
|
||||||
|
@ -386,7 +400,14 @@ impl Env {
|
||||||
check_status!(unsafe {
|
check_status!(unsafe {
|
||||||
sys::napi_create_external_arraybuffer(
|
sys::napi_create_external_arraybuffer(
|
||||||
self.0,
|
self.0,
|
||||||
data_ptr as *mut c_void,
|
if length == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
data_ptr as *mut c_void
|
||||||
|
},
|
||||||
length,
|
length,
|
||||||
Some(drop_buffer),
|
Some(drop_buffer),
|
||||||
Box::into_raw(Box::new((length, data.capacity()))) as *mut c_void,
|
Box::into_raw(Box::new((length, data.capacity()))) as *mut c_void,
|
||||||
|
@ -426,7 +447,14 @@ impl Env {
|
||||||
check_status!(unsafe {
|
check_status!(unsafe {
|
||||||
sys::napi_create_external_arraybuffer(
|
sys::napi_create_external_arraybuffer(
|
||||||
self.0,
|
self.0,
|
||||||
data as *mut c_void,
|
if length == 0 {
|
||||||
|
// Rust uses 0x1 as the data pointer for empty buffers,
|
||||||
|
// but NAPI/V8 only allows multiple buffers to have
|
||||||
|
// the same data pointer if it's 0x0.
|
||||||
|
ptr::null_mut()
|
||||||
|
} else {
|
||||||
|
data as *mut c_void
|
||||||
|
},
|
||||||
length,
|
length,
|
||||||
Some(
|
Some(
|
||||||
raw_finalize_with_custom_callback::<Hint, Finalize>
|
raw_finalize_with_custom_callback::<Hint, Finalize>
|
||||||
|
|
Loading…
Reference in a new issue