Allow 'this' to not be a wrapped object. bug 390560, r+sr+a=jst

git-svn-id: svn://10.0.0.236/trunk@232171 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
mrbkap%gmail.com
2007-08-15 21:20:45 +00:00
parent b2b0fba071
commit 54f6cb88ee

View File

@@ -273,9 +273,18 @@ XPC_XOW_FunctionWrapper(JSContext *cx, JSObject *obj, uintN argc, jsval *argv,
{
JSObject *wrappedObj, *outerObj = obj;
obj = GetWrapper(cx, obj);
if (!obj || (wrappedObj = GetWrappedObject(cx, obj)) == nsnull) {
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
// Allow 'this' to be either an XOW, in which case we unwrap it.
// We disallow invalid XOWs that have no wrapped object. Otherwise,
// if it isn't an XOW, then pass it through as-is.
wrappedObj = GetWrapper(cx, obj);
if (wrappedObj) {
wrappedObj = GetWrappedObject(cx, wrappedObj);
if (!wrappedObj) {
return ThrowException(NS_ERROR_ILLEGAL_VALUE, cx);
}
} else {
wrappedObj = obj;
}
JSObject *funObj = JSVAL_TO_OBJECT(argv[-2]);