diff options
author | yvt <i@yvt.jp> | 2021-07-10 18:09:05 +0900 |
---|---|---|
committer | yvt <i@yvt.jp> | 2021-07-10 18:18:33 +0900 |
commit | 28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd (patch) | |
tree | 6e18c3c43cdcd703022c7015bab13a66066357e1 | |
parent | 01a7de50ab1843d85295f9dccad7f4c099e7208c (diff) | |
download | servo-28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd.tar.gz servo-28c670d6c3bfa084fc99f913f3f1caa87e6d7dbd.zip |
fix: accommodate to the modern age
-rw-r--r-- | components/script/dom/bindings/interface.rs | 2 | ||||
-rw-r--r-- | components/script/dom/bindings/utils.rs | 17 | ||||
-rw-r--r-- | components/script/script_runtime.rs | 2 |
3 files changed, 15 insertions, 6 deletions
diff --git a/components/script/dom/bindings/interface.rs b/components/script/dom/bindings/interface.rs index e982a001fb0..5d8036dd5c8 100644 --- a/components/script/dom/bindings/interface.rs +++ b/components/script/dom/bindings/interface.rs @@ -10,8 +10,8 @@ use crate::dom::bindings::constant::{define_constants, ConstantSpec}; use crate::dom::bindings::conversions::{get_dom_class, DOM_OBJECT_SLOT}; use crate::dom::bindings::guard::Guard; use crate::dom::bindings::utils::{ProtoOrIfaceArray, DOM_PROTOTYPE_SLOT}; +use crate::dom::window::Window; use crate::script_runtime::JSContext as SafeJSContext; -use dom::window::Window; use js::error::throw_type_error; use js::glue::UncheckedUnwrapObject; use js::jsapi::GetWellKnownSymbol; diff --git a/components/script/dom/bindings/utils.rs b/components/script/dom/bindings/utils.rs index 17bbae95f1b..e5804779d3b 100644 --- a/components/script/dom/bindings/utils.rs +++ b/components/script/dom/bindings/utils.rs @@ -16,7 +16,10 @@ use crate::dom::bindings::error::{throw_dom_exception, throw_invalid_this, Error use crate::dom::bindings::inheritance::TopTypeId; use crate::dom::bindings::str::DOMString; use crate::dom::bindings::trace::trace_object; +use crate::dom::globalscope::GlobalScope; use crate::dom::windowproxy; +use crate::realms::AlreadyInRealm; +use crate::realms::InRealm; use crate::script_runtime::JSContext as SafeJSContext; use js::conversions::ToJSValConvertible; use js::glue::SetIsFrameIdCallback; @@ -110,7 +113,7 @@ enum CrossOriginObjectType { CrossOriginOpaque, } -unsafe fn identify_cross_origin_object(obj: HandleObject) -> CrossOriginObjectType { +unsafe fn identify_cross_origin_object(obj: RawHandleObject) -> CrossOriginObjectType { let obj = UncheckedUnwrapObject(obj.get(), /* stopAtWindowProxy = */ 0); let obj_class = JS_GetClass(obj); let name = str::from_utf8(CStr::from_ptr((*obj_class).name).to_bytes()) @@ -123,7 +126,7 @@ unsafe fn identify_cross_origin_object(obj: HandleObject) -> CrossOriginObjectTy } } -unsafe fn target_subsumes_obj(cx: *mut JSContext, obj: HandleObject) -> bool { +unsafe fn target_subsumes_obj(cx: *mut JSContext, obj: RawHandleObject) -> bool { //step 1 get compartment let obj_c = get_object_compartment(obj.get()); let ctx_c = get_context_compartment(cx); @@ -166,7 +169,7 @@ pub unsafe extern "C" fn subsumes(obj: *mut JSPrincipals, other: *mut JSPrincipa obj_origin.same_origin_domain(&other_origin) } -unsafe fn select_wrapper(cx: *mut JSContext, obj: HandleObject) -> *const libc::c_void { +unsafe fn select_wrapper(cx: *mut JSContext, obj: RawHandleObject) -> *const libc::c_void { let security_wrapper = !target_subsumes_obj(cx, obj); if !security_wrapper { return GetCrossCompartmentWrapper(); @@ -603,7 +606,13 @@ unsafe extern "C" fn wrap( unsafe extern "C" fn throw_dom_exception_callback(cx: *mut JSContext) { //TODO it might not always be a SecurityError? - throw_dom_exception(cx, &GlobalScope::from_context(cx), Error::Security); + let cx = SafeJSContext::from_ptr(cx); + let in_realm_proof = AlreadyInRealm::assert_for_cx(cx); + throw_dom_exception( + cx, + &GlobalScope::from_context(*cx, InRealm::in_realm(&in_realm_proof)), + Error::Security, + ); } unsafe extern "C" fn is_frame_id(cx: *mut JSContext, obj: *mut JSObject, id_arg: jsid) -> bool { diff --git a/components/script/script_runtime.rs b/components/script/script_runtime.rs index 9c61c2fe062..151db669405 100644 --- a/components/script/script_runtime.rs +++ b/components/script/script_runtime.rs @@ -473,7 +473,7 @@ unsafe fn new_rt_and_cx_with_parent( JS_AddExtraGCRootsTracer(cx, Some(trace_rust_roots), ptr::null_mut()); - JS_SetSecurityCallbacks(runtime.rt(), &SECURITY_CALLBACKS); + JS_SetSecurityCallbacks(cx, &SECURITY_CALLBACKS); // Needed for debug assertions about whether GC is running. if cfg!(debug_assertions) { |