script: Make set_dictionary_property a safe function (#39191)

Makes `set_dictionary_property` safe.

Testing: Changes are internal, this shouldn't affect behavior.
Fixes: #39128

Signed-off-by: lumiscosity <averyrudelphe@gmail.com>
This commit is contained in:
lumiscosity 2025-09-07 13:56:20 +02:00 committed by GitHub
parent af8723c0b1
commit 088d16d634
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 20 deletions

View file

@ -7545,7 +7545,7 @@ impl{self.generic} Clone for {self.makeClassName(self.dictionary)}{self.genericS
insertion = (
f"rooted!(in(cx) let mut {varName}_js = UndefinedValue());\n"
f"{varName}.to_jsval(cx, {varName}_js.handle_mut());\n"
f'set_dictionary_property(cx, obj.handle(), "{dictionaryName}", {varName}_js.handle()).unwrap();')
f'set_dictionary_property(SafeJSContext::from_ptr(cx), obj.handle(), "{dictionaryName}", {varName}_js.handle()).unwrap();')
return CGGeneric(insertion)
def memberInsert(memberInfo: tuple[IDLArgument, JSToNativeConversionInfo]) -> CGThing:

View file

@ -290,12 +290,9 @@ pub unsafe fn get_dictionary_property(
/// Set the property with name `property` from `object`.
/// Returns `Err(())` on JSAPI failure, or null object,
/// and Ok(()) otherwise
///
/// # Safety
/// `cx` must point to a valid, non-null JSContext.
#[allow(clippy::result_unit_err)]
pub unsafe fn set_dictionary_property(
cx: *mut JSContext,
pub fn set_dictionary_property(
cx: SafeJSContext,
object: HandleObject,
property: &str,
value: HandleValue,
@ -305,8 +302,10 @@ pub unsafe fn set_dictionary_property(
}
let property = CString::new(property).unwrap();
if !JS_SetProperty(cx, object, property.as_ptr(), value) {
return Err(());
unsafe {
if !JS_SetProperty(*cx, object, property.as_ptr(), value) {
return Err(());
}
}
Ok(())