bug 316990: Allow hasOwnProperty to work, even with split windows, by checking that the returned object is actually the inner object of |this|. r=brendan

This commit is contained in:
mrbkap%gmail.com 2005-11-21 19:40:55 +00:00
Родитель 6116765186
Коммит 2f7446b528
1 изменённых файлов: 16 добавлений и 4 удалений

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

@ -1366,11 +1366,23 @@ js_HasOwnPropertyHelper(JSContext *cx, JSObject *obj, JSLookupPropOp lookup,
*rval = JSVAL_FALSE; *rval = JSVAL_FALSE;
} else if (obj2 == obj) { } else if (obj2 == obj) {
*rval = JSVAL_TRUE; *rval = JSVAL_TRUE;
} else if (OBJ_IS_NATIVE(obj2)) {
sprop = (JSScopeProperty *)prop;
*rval = BOOLEAN_TO_JSVAL(SPROP_IS_SHARED_PERMANENT(sprop));
} else { } else {
*rval = JSVAL_FALSE; JSClass *clasp;
JSExtendedClass *xclasp;
clasp = OBJ_GET_CLASS(cx, obj);
xclasp = (clasp->flags & JSCLASS_IS_EXTENDED)
? (JSExtendedClass *)clasp
: NULL;
if (xclasp && xclasp->outerObject &&
xclasp->outerObject(cx, obj2) == obj) {
*rval = JSVAL_TRUE;
} else if (OBJ_IS_NATIVE(obj2)) {
sprop = (JSScopeProperty *)prop;
*rval = BOOLEAN_TO_JSVAL(SPROP_IS_SHARED_PERMANENT(sprop));
} else {
*rval = JSVAL_FALSE;
}
} }
if (prop) if (prop)
OBJ_DROP_PROPERTY(cx, obj2, prop); OBJ_DROP_PROPERTY(cx, obj2, prop);