зеркало из https://github.com/mozilla/pjs.git
Fix js_FilterXMLList to save and restore fp->spbase (301596, r+a=shaver).
This commit is contained in:
Родитель
ef844bb373
Коммит
77c3043556
|
@ -7800,6 +7800,7 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
|
||||||
JSStackFrame *fp;
|
JSStackFrame *fp;
|
||||||
JSObject *scobj, *listobj, *resobj, *withobj, *kidobj;
|
JSObject *scobj, *listobj, *resobj, *withobj, *kidobj;
|
||||||
JSXML *xml, *list, *result, *kid;
|
JSXML *xml, *list, *result, *kid;
|
||||||
|
jsval *spbase;
|
||||||
uint32 i, n;
|
uint32 i, n;
|
||||||
|
|
||||||
ok = JS_EnterLocalRootScope(cx);
|
ok = JS_EnterLocalRootScope(cx);
|
||||||
|
@ -7836,6 +7837,9 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
|
||||||
goto bad;
|
goto bad;
|
||||||
fp->scopeChain = withobj;
|
fp->scopeChain = withobj;
|
||||||
|
|
||||||
|
/* Save and restore fp->spbase, as js_Interpret sets and clears it. */
|
||||||
|
spbase = fp->spbase;
|
||||||
|
|
||||||
for (i = 0, n = list->xml_kids.length; i < n; i++) {
|
for (i = 0, n = list->xml_kids.length; i < n; i++) {
|
||||||
kid = XMLARRAY_MEMBER(&list->xml_kids, i, JSXML);
|
kid = XMLARRAY_MEMBER(&list->xml_kids, i, JSXML);
|
||||||
kidobj = js_GetXMLObject(cx, kid);
|
kidobj = js_GetXMLObject(cx, kid);
|
||||||
|
@ -7858,6 +7862,7 @@ js_FilterXMLList(JSContext *cx, JSObject *obj, jsbytecode *pc, jsval *vp)
|
||||||
*vp = OBJECT_TO_JSVAL(resobj);
|
*vp = OBJECT_TO_JSVAL(resobj);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
fp->spbase = spbase;
|
||||||
fp->scopeChain = scobj;
|
fp->scopeChain = scobj;
|
||||||
JS_LeaveLocalRootScope(cx);
|
JS_LeaveLocalRootScope(cx);
|
||||||
return ok;
|
return ok;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче