fix(cli/napi): correct name handling in napi property descriptor (#17716)

Fixes https://github.com/denoland/deno/issues/17712
This commit is contained in:
Divy Srivastava 2023-02-10 21:46:56 +05:30 committed by GitHub
parent 46817a0e3d
commit 39f131cd76
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 24 deletions

View file

@ -1437,10 +1437,12 @@ fn napi_define_properties(
for property in properties {
let name = if !property.utf8name.is_null() {
let name_str = CStr::from_ptr(property.utf8name).to_str().unwrap();
v8::String::new(scope, name_str).ok_or(Error::GenericFailure)?
v8::String::new(scope, name_str)
.ok_or(Error::GenericFailure)?
.into()
} else {
let property_value = napi_value_unchecked(property.name);
v8::Local::<v8::String>::try_from(property_value)
v8::Local::<v8::Name>::try_from(property_value)
.map_err(|_| Error::NameExpected)?
};
@ -1461,7 +1463,7 @@ fn napi_define_properties(
desc.set_enumerable(property.attributes & napi_enumerable != 0);
desc.set_configurable(property.attributes & napi_configurable != 0);
let define_maybe = object.define_property(scope, name.into(), &desc);
let define_maybe = object.define_property(scope, name, &desc);
return_status_if_false!(
env_ptr,
!define_maybe.unwrap_or(false),

View file

@ -15,4 +15,10 @@ Deno.test("napi properties", () => {
assertEquals(properties.test_simple_property, {
nice: 69,
});
assertEquals(properties.key_v8_string, 1);
const symbols = Object.getOwnPropertySymbols(properties);
assertEquals(symbols.length, 1);
assertEquals(symbols[0].description, "key_v8_symbol");
assertEquals(properties[symbols[0]], 1);
});

View file

@ -82,27 +82,26 @@ pub fn init(env: napi_env, exports: napi_value) {
attributes: enumerable,
value: number,
},
// TODO(@littledivy): Fix this.
// napi_property_descriptor {
// utf8name: ptr::null(),
// name: name_value,
// method: None,
// getter: None,
// setter: None,
// data: ptr::null_mut(),
// attributes: enumerable,
// value: number,
// },
// napi_property_descriptor {
// utf8name: ptr::null(),
// name: name_symbol,
// method: None,
// getter: None,
// setter: None,
// data: ptr::null_mut(),
// attributes: enumerable,
// value: number,
// },
napi_property_descriptor {
utf8name: ptr::null(),
name: name_value,
method: None,
getter: None,
setter: None,
data: ptr::null_mut(),
attributes: enumerable,
value: number,
},
napi_property_descriptor {
utf8name: ptr::null(),
name: name_symbol,
method: None,
getter: None,
setter: None,
data: ptr::null_mut(),
attributes: enumerable,
value: number,
},
];
assert_napi_ok!(napi_define_properties(