From f37fdbc778c07d7f8c296c62571025562912658d Mon Sep 17 00:00:00 2001 From: Ms2ger Date: Tue, 24 Jun 2014 16:22:15 +0200 Subject: [PATCH] Handle setting a readonly attribute on proxy reflectors correctly. --- .../script/dom/bindings/proxyhandler.rs | 17 ++++++++++------- src/support/spidermonkey/rust-mozjs | 2 +- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/components/script/dom/bindings/proxyhandler.rs b/src/components/script/dom/bindings/proxyhandler.rs index 0f573df6edc..66984ebdc19 100644 --- a/src/components/script/dom/bindings/proxyhandler.rs +++ b/src/components/script/dom/bindings/proxyhandler.rs @@ -6,11 +6,13 @@ use dom::bindings::utils::is_dom_proxy; use js::jsapi::{JSContext, jsid, JSPropertyDescriptor, JSObject, JSString, jschar}; use js::jsapi::{JS_GetPropertyDescriptorById, JS_NewUCString, JS_malloc, JS_free}; use js::jsapi::{JSBool, JS_DefinePropertyById, JS_NewObjectWithGivenProto}; -use js::jsapi::JS_StrictPropertyStub; +use js::jsapi::{JS_ReportErrorFlagsAndNumber, JS_StrictPropertyStub}; +use js::jsapi::{JSREPORT_WARNING, JSREPORT_STRICT, JSREPORT_STRICT_MODE_ERROR}; use js::jsval::ObjectValue; use js::glue::GetProxyExtra; use js::glue::{GetObjectProto, GetObjectParent, SetProxyExtra, GetProxyHandler}; use js::glue::InvokeGetOwnPropertyDescriptor; +use js::glue::RUST_js_GetErrorMessage; use js::{JSPROP_GETTER, JSPROP_ENUMERATE, JSPROP_READONLY, JSRESOLVE_QUALIFIED}; use libc; @@ -45,17 +47,18 @@ pub extern fn getPropertyDescriptor(cx: *mut JSContext, proxy: *mut JSObject, id pub fn defineProperty_(cx: *mut JSContext, proxy: *mut JSObject, id: jsid, desc: *JSPropertyDescriptor) -> JSBool { + static JSMSG_GETTER_ONLY: libc::c_uint = 160; + unsafe { //FIXME: Workaround for https://github.com/mozilla/rust/issues/13385 let setter: *libc::c_void = mem::transmute((*desc).setter); let setter_stub: *libc::c_void = mem::transmute(JS_StrictPropertyStub); if ((*desc).attrs & JSPROP_GETTER) != 0 && setter == setter_stub { - /*return JS_ReportErrorFlagsAndNumber(cx, - JSREPORT_WARNING | JSREPORT_STRICT | - JSREPORT_STRICT_MODE_ERROR, - js_GetErrorMessage, NULL, - JSMSG_GETTER_ONLY);*/ - return 0; + return JS_ReportErrorFlagsAndNumber(cx, + JSREPORT_WARNING | JSREPORT_STRICT | + JSREPORT_STRICT_MODE_ERROR, + Some(RUST_js_GetErrorMessage), ptr::mut_null(), + JSMSG_GETTER_ONLY); } let expando = EnsureExpandoObject(cx, proxy); diff --git a/src/support/spidermonkey/rust-mozjs b/src/support/spidermonkey/rust-mozjs index 99be3ff35cc..de83c2e8ee0 160000 --- a/src/support/spidermonkey/rust-mozjs +++ b/src/support/spidermonkey/rust-mozjs @@ -1 +1 @@ -Subproject commit 99be3ff35cce83d3b12c284cf7713712cb467a0d +Subproject commit de83c2e8ee046e5f60ee65810c58c36571d6be15