Skip to content

Commit 6f3dcb9

Browse files
authored
Use NonNull for jsstr_to_string, latin1_to_string (#605)
Signed-off-by: sagudev <[email protected]>
1 parent 75ba574 commit 6f3dcb9

File tree

3 files changed

+19
-11
lines changed

3 files changed

+19
-11
lines changed

mozjs/src/conversions.rs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ use log::debug;
4848
use mozjs_sys::jsgc::Rooted;
4949
use std::borrow::Cow;
5050
use std::mem;
51+
use std::ptr::NonNull;
5152
use std::rc::Rc;
5253
use std::{ptr, slice};
5354

@@ -527,11 +528,11 @@ impl FromJSValConvertible for f64 {
527528

528529
/// Converts a `JSString`, encoded in "Latin1" (i.e. U+0000-U+00FF encoded as 0x00-0xFF) into a
529530
/// `String`.
530-
pub unsafe fn latin1_to_string(cx: *mut JSContext, s: *mut JSString) -> String {
531-
assert!(JS_DeprecatedStringHasLatin1Chars(s));
531+
pub unsafe fn latin1_to_string(cx: *mut JSContext, s: NonNull<JSString>) -> String {
532+
assert!(JS_DeprecatedStringHasLatin1Chars(s.as_ptr()));
532533

533534
let mut length = 0;
534-
let chars = JS_GetLatin1StringCharsAndLength(cx, ptr::null(), s, &mut length);
535+
let chars = JS_GetLatin1StringCharsAndLength(cx, ptr::null(), s.as_ptr(), &mut length);
535536
assert!(!chars.is_null());
536537

537538
let chars = slice::from_raw_parts(chars, length as usize);
@@ -541,13 +542,13 @@ pub unsafe fn latin1_to_string(cx: *mut JSContext, s: *mut JSString) -> String {
541542
}
542543

543544
/// Converts a `JSString` into a `String`, regardless of used encoding.
544-
pub unsafe fn jsstr_to_string(cx: *mut JSContext, jsstr: *mut JSString) -> String {
545-
if JS_DeprecatedStringHasLatin1Chars(jsstr) {
545+
pub unsafe fn jsstr_to_string(cx: *mut JSContext, jsstr: NonNull<JSString>) -> String {
546+
if JS_DeprecatedStringHasLatin1Chars(jsstr.as_ptr()) {
546547
return latin1_to_string(cx, jsstr);
547548
}
548549

549550
let mut length = 0;
550-
let chars = JS_GetTwoByteStringCharsAndLength(cx, ptr::null(), jsstr, &mut length);
551+
let chars = JS_GetTwoByteStringCharsAndLength(cx, ptr::null(), jsstr.as_ptr(), &mut length);
551552
assert!(!chars.is_null());
552553
let char_vec = slice::from_raw_parts(chars, length as usize);
553554
String::from_utf16_lossy(char_vec)
@@ -588,10 +589,10 @@ impl FromJSValConvertible for String {
588589
_: (),
589590
) -> Result<ConversionResult<String>, ()> {
590591
let jsstr = ToString(cx, value);
591-
if jsstr.is_null() {
592+
let Some(jsstr) = NonNull::new(jsstr) else {
592593
debug!("ToString failed");
593594
return Err(());
594-
}
595+
};
595596
Ok(jsstr_to_string(cx, jsstr)).map(ConversionResult::Success)
596597
}
597598
}

mozjs/src/rust.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1073,7 +1073,7 @@ impl<'a> CapturedJSStack<'a> {
10731073
return None;
10741074
}
10751075

1076-
Some(jsstr_to_string(self.cx, string_handle.get()))
1076+
Some(jsstr_to_string(self.cx, NonNull::new(string_handle.get())?))
10771077
}
10781078
}
10791079

mozjs/tests/external_string.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use std::ffi::c_void;
66
use std::ptr;
7+
use std::ptr::NonNull;
78

89
use mozjs::conversions::jsstr_to_string;
910
use mozjs::glue::{CreateJSExternalStringCallbacks, JSExternalStringCallbacksTraps};
@@ -50,7 +51,10 @@ fn external_string() {
5051
latin1_base.len(),
5152
callbacks
5253
));
53-
assert_eq!(jsstr_to_string(context, latin1_jsstr.get()), latin1_base);
54+
assert_eq!(
55+
jsstr_to_string(context, NonNull::new(latin1_jsstr.get()).unwrap()),
56+
latin1_base
57+
);
5458

5559
let utf16_base = "test utf-16 $€ \u{10437}\u{24B62}";
5660
let utf16_boxed = utf16_base
@@ -70,7 +74,10 @@ fn external_string() {
7074
utf16_len,
7175
callbacks
7276
));
73-
assert_eq!(jsstr_to_string(context, utf16_jsstr.get()), utf16_base);
77+
assert_eq!(
78+
jsstr_to_string(context, NonNull::new(utf16_jsstr.get()).unwrap()),
79+
utf16_base
80+
);
7481
}
7582
}
7683

0 commit comments

Comments
 (0)