$OpenBSD$ index f79290c..6c729c8 100644 --- js/xpconnect/wrappers/XrayWrapper.cpp.orig Fri Feb 20 15:40:37 2015 +++ js/xpconnect/wrappers/XrayWrapper.cpp Fri Feb 20 15:40:37 2015 @@ -1680,13 +1680,19 @@ XrayToString(JSContext *cx, unsigned argc, Value *vp) return false; } - RootedObject obj(cx, XrayTraits::getTargetObject(wrapper)); - static const char start[] = "[object XrayWrapper "; static const char end[] = "]"; - if (UseDOMXray(obj)) + + RootedObject obj(cx, XrayTraits::getTargetObject(wrapper)); + XrayType type = GetXrayType(obj); + if (type == XrayForDOMObject) return NativeToString(cx, wrapper, obj, start, end, args.rval()); + if (type != XrayForWrappedNative) { + JS_ReportError(cx, "XrayToString called on an incompatible object"); + return false; + } + nsAutoString result; result.AppendASCII(start); @@ -2265,12 +2271,13 @@ template class SCSecurityXrayXPCWN; static nsQueryInterface do_QueryInterfaceNative(JSContext* cx, HandleObject wrapper) { - nsISupports* nativeSupports; + nsISupports* nativeSupports = nullptr; if (IsWrapper(wrapper) && WrapperFactory::IsXrayWrapper(wrapper)) { RootedObject target(cx, XrayTraits::getTargetObject(wrapper)); - if (GetXrayType(target) == XrayForDOMObject) { + XrayType type = GetXrayType(target); + if (type == XrayForDOMObject) { nativeSupports = UnwrapDOMObjectToISupports(target); - } else { + } else if (type == XrayForWrappedNative) { XPCWrappedNative *wn = XPCWrappedNative::Get(target); nativeSupports = wn->Native(); }