diff --git a/mozilla/js/src/jsapi.h b/mozilla/js/src/jsapi.h index 5fafa15548e..17670d33f6a 100644 --- a/mozilla/js/src/jsapi.h +++ b/mozilla/js/src/jsapi.h @@ -1212,7 +1212,9 @@ struct JSExtendedClass { JSObjectOp outerObject; JSObjectOp innerObject; JSIteratorOp iteratorObject; - JSObjectOp wrappedObject; + JSObjectOp wrappedObject; /* NB: infallible, null + returns are treated as + the original object */ void (*reserved0)(void); void (*reserved1)(void); void (*reserved2)(void); diff --git a/mozilla/js/src/jsinterp.c b/mozilla/js/src/jsinterp.c index a6037466907..c71d67b1c4b 100644 --- a/mozilla/js/src/jsinterp.c +++ b/mozilla/js/src/jsinterp.c @@ -1522,13 +1522,19 @@ js_StrictlyEqual(JSContext *cx, jsval lval, jsval rval) robj = JSVAL_TO_OBJECT(rval); lclasp = OBJ_GET_CLASS(cx, lobj); rclasp = OBJ_GET_CLASS(cx, robj); - if (lclasp->flags & rclasp->flags & JSCLASS_IS_EXTENDED) { - JSExtendedClass *lxclasp = (JSExtendedClass *) lclasp, - *rxclasp = (JSExtendedClass *) rclasp; - return (lxclasp->wrappedObject && rxclasp->wrappedObject) - ? lxclasp->wrappedObject(cx, lval) == - rxclasp->wrappedObject(cx, rval) - : lval == rval; + if (lclasp->flags & JSCLASS_IS_EXTENDED) { + JSExtendedClass *xclasp = (JSExtendedClass *) lclasp; + if (xclasp->wrappedObject && + (lobj = xclasp->wrappedObject(cx, lobj))) { + lval = OBJECT_TO_JSVAL(lobj); + } + } + if (rclasp->flags & JSCLASS_IS_EXTENDED) { + JSExtendedClass *xclasp = (JSExtendedClass *) rclasp; + if (xclasp->wrappedObject && + (robj = xclasp->wrappedObject(cx, robj))) { + rval = OBJECT_TO_JSVAL(robj); + } } } return lval == rval; diff --git a/mozilla/js/src/xpconnect/src/XPCSafeJSObjectWrapper.cpp b/mozilla/js/src/xpconnect/src/XPCSafeJSObjectWrapper.cpp index a55841dcdbf..6dc934d4e7e 100644 --- a/mozilla/js/src/xpconnect/src/XPCSafeJSObjectWrapper.cpp +++ b/mozilla/js/src/xpconnect/src/XPCSafeJSObjectWrapper.cpp @@ -201,6 +201,8 @@ JSExtendedClass sXPC_SJOW_JSClass = { }, // JSExtendedClass initialization XPC_SJOW_Equality, + nsnull, // outerObject + nsnull, // innerObject nsnull, // iteratorObject XPC_SJOW_WrappedObject, JSCLASS_NO_RESERVED_MEMBERS