0
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2025-02-15 10:06:23 -05:00

fix(ext/napi): napi_is_buffer tests for ArrayBufferView (#27956)

use correct type check

Fixes: https://github.com/denoland/deno/issues/27951
This commit is contained in:
snek 2025-02-04 15:30:40 +01:00 committed by Bartek Iwańczuk
parent 83ef54f465
commit 88f22dda3b
No known key found for this signature in database
GPG key ID: 0C6BCDDC3B3AD750
3 changed files with 26 additions and 11 deletions

View file

@ -400,18 +400,8 @@ fn napi_is_buffer(
check_arg!(env, value);
check_arg!(env, result);
let buffer_constructor =
v8::Local::new(&mut env.scope(), &env.buffer_constructor);
let Some(is_buffer) = value
.unwrap()
.instance_of(&mut env.scope(), buffer_constructor.into())
else {
return napi_set_last_error(env, napi_generic_failure);
};
unsafe {
*result = is_buffer;
*result = value.unwrap().is_array_buffer_view();
}
napi_clear_last_error(env)

View file

@ -144,10 +144,26 @@ extern "C" fn test_external(
typedarray
}
extern "C" fn test_is_buffer(
env: napi_env,
info: napi_callback_info,
) -> napi_value {
let (args, argc, _) = napi_get_callback_info!(env, info, 1);
assert_eq!(argc, 1);
let mut is_buffer: bool = false;
assert_napi_ok!(napi_is_buffer(env, args[0], &mut is_buffer));
let mut result: napi_value = std::ptr::null_mut();
assert_napi_ok!(napi_get_boolean(env, is_buffer, &mut result));
result
}
pub fn init(env: napi_env, exports: napi_value) {
let properties = &[
napi_new_property!(env, "test_external", test_external),
napi_new_property!(env, "test_multiply", test_multiply),
napi_new_property!(env, "test_is_buffer", test_is_buffer),
];
assert_napi_ok!(napi_define_properties(

View file

@ -1,5 +1,6 @@
// Copyright 2018-2025 the Deno authors. MIT license.
import { Buffer } from "node:buffer";
import { assert, assertEquals, loadTestLibrary } from "./common.js";
const typedarray = loadTestLibrary();
@ -28,6 +29,14 @@ Deno.test("napi typedarray float64", function () {
assertEquals(Math.round(10 * doubleResult[2]) / 10, -6.6);
});
Deno.test("napi_is_buffer", () => {
assert(!typedarray.test_is_buffer(5));
assert(!typedarray.test_is_buffer([]));
assert(typedarray.test_is_buffer(new Uint8Array()));
assert(typedarray.test_is_buffer(new Uint32Array()));
assert(typedarray.test_is_buffer(new Buffer([])));
});
// TODO(bartlomieju): this test causes segfaults when used with jemalloc.
// Node documentation provides a hint that this function is not supported by
// other runtime like electron.