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

This commit is contained in:
mrbkap@gmail.com 2007-08-15 14:20:45 -07:00
Родитель 10e61ce970
Коммит ecc59c99c5
1 изменённых файлов: 12 добавлений и 3 удалений

Просмотреть файл

@ -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]);