|
5 | 5 | use std::ptr::{self, NonNull}; |
6 | 6 | use std::sync::{LazyLock, Mutex}; |
7 | 7 |
|
8 | | -use mozjs::conversions::jsstr_to_string; |
| 8 | +use mozjs::conversions::jsstr_to_string_safe; |
9 | 9 | use mozjs::gc::StackGCVector; |
10 | 10 | use mozjs::jsapi::{ |
11 | 11 | CompilationType, Handle, HandleString, HandleValue, JSContext, JSSecurityCallbacks, JSString, |
@@ -34,29 +34,32 @@ unsafe extern "C" fn content_security_policy_allows( |
34 | 34 | _body_arg: HandleValue, |
35 | 35 | can_compile_strings: *mut bool, |
36 | 36 | ) -> bool { |
| 37 | + // SAFETY: We are in SM hook |
| 38 | + let mut cx = unsafe { mozjs::context::JSContext::from_ptr(NonNull::new(cx).unwrap()) }; |
| 39 | + let cx = &mut cx; |
37 | 40 | let parameter_strings = SafeHandle::from_raw(parameter_strings); |
38 | 41 | assert_eq!(parameter_strings.len(), 2); |
39 | 42 |
|
40 | 43 | let string0 = parameter_strings.at(0).expect("should have a value"); |
41 | 44 | let string0 = NonNull::new(*string0).expect("should be non-null"); |
42 | | - assert_eq!(jsstr_to_string(cx, string0), "a".to_string()); |
| 45 | + assert_eq!(jsstr_to_string_safe(cx, string0), "a".to_string()); |
43 | 46 |
|
44 | 47 | let string1 = parameter_strings.at(1).expect("should have a value"); |
45 | 48 | let string1 = NonNull::new(*string1).expect("should be non-null"); |
46 | | - assert_eq!(jsstr_to_string(cx, string1), "b".to_string()); |
| 49 | + assert_eq!(jsstr_to_string_safe(cx, string1), "b".to_string()); |
47 | 50 |
|
48 | 51 | let parameter_args = SafeHandle::from_raw(parameter_args); |
49 | 52 | assert_eq!(parameter_args.len(), 2); |
50 | 53 |
|
51 | 54 | let arg0 = parameter_args.at(0).expect("should have a value"); |
52 | 55 | let string0 = arg0.to_string(); |
53 | 56 | let string0 = NonNull::new(string0).expect("should be non-null"); |
54 | | - assert_eq!(jsstr_to_string(cx, string0), "a".to_string()); |
| 57 | + assert_eq!(jsstr_to_string_safe(cx, string0), "a".to_string()); |
55 | 58 |
|
56 | 59 | let arg1 = parameter_args.at(1).expect("should have a value"); |
57 | 60 | let string1 = arg1.to_string(); |
58 | 61 | let string1 = NonNull::new(string1).expect("should be non-null"); |
59 | | - assert_eq!(jsstr_to_string(cx, string1), "b".to_string()); |
| 62 | + assert_eq!(jsstr_to_string_safe(cx, string1), "b".to_string()); |
60 | 63 |
|
61 | 64 | *RAN_CSP_CALLBACK.lock().unwrap() = true; |
62 | 65 | *can_compile_strings = true; |
|
0 commit comments