Bug 632253 - Move magic check to JS_XDRScript, r=igor

This commit is contained in:
Michael Wu 2011-03-15 18:00:58 -07:00
Родитель 0994a69030
Коммит 20eca7a69e
4 изменённых файлов: 18 добавлений и 30 удалений

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

@ -1903,7 +1903,7 @@ js_XDRFunctionObject(JSXDRState *xdr, JSObject **objp)
fun->u.i.wrapper = JSPackedBool((firstword >> 1) & 1);
}
if (!js_XDRScript(xdr, &fun->u.i.script, NULL))
if (!js_XDRScript(xdr, &fun->u.i.script))
return false;
if (xdr->mode == JSXDR_DECODE) {

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

@ -308,7 +308,7 @@ enum ScriptBits {
};
JSBool
js_XDRScript(JSXDRState *xdr, JSScript **scriptp, JSBool *hasMagic)
js_XDRScript(JSXDRState *xdr, JSScript **scriptp)
{
JSScript *oldscript;
JSBool ok;
@ -333,24 +333,6 @@ js_XDRScript(JSXDRState *xdr, JSScript **scriptp, JSBool *hasMagic)
/* Should not XDR scripts optimized for a single global object. */
JS_ASSERT_IF(script, !JSScript::isValidOffset(script->globalsOffset));
uint32 magic;
if (xdr->mode == JSXDR_ENCODE)
magic = JSXDR_MAGIC_SCRIPT_CURRENT;
if (!JS_XDRUint32(xdr, &magic))
return JS_FALSE;
if (magic != JSXDR_MAGIC_SCRIPT_CURRENT) {
/* We do not provide binary compatibility with older scripts. */
if (!hasMagic) {
JS_ReportErrorNumber(cx, js_GetErrorMessage, NULL,
JSMSG_BAD_SCRIPT_MAGIC);
return JS_FALSE;
}
*hasMagic = JS_FALSE;
return JS_TRUE;
}
if (hasMagic)
*hasMagic = JS_TRUE;
/* XDR arguments, local vars, and upvars. */
uint16 nargs, nvars, nupvars;
#if defined(DEBUG) || defined(__GNUC__) /* quell GCC overwarning */
@ -1983,7 +1965,7 @@ js_CloneScript(JSContext *cx, JSScript *script)
// we don't want gecko to transcribe our principals for us
DisablePrincipalsTranscoding disable(cx);
if (!js_XDRScript(w, &script, NULL)) {
if (!js_XDRScript(w, &script)) {
JS_XDRDestroy(w);
return NULL;
}
@ -2007,7 +1989,7 @@ js_CloneScript(JSContext *cx, JSScript *script)
JS_XDRMemSetData(r, p, nbytes);
JS_XDRMemSetData(w, NULL, 0);
if (!js_XDRScript(r, &script, NULL))
if (!js_XDRScript(r, &script))
return NULL;
JS_XDRDestroy(r);

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

@ -771,17 +771,12 @@ extern JSScript *
js_CloneScript(JSContext *cx, JSScript *script);
/*
* If magic is non-null, js_XDRScript succeeds on magic number mismatch but
* returns false in *magic; it reflects a match via a true *magic out param.
* If magic is null, js_XDRScript returns false on bad magic number errors,
* which it reports.
*
* NB: after a successful JSXDR_DECODE, js_XDRScript callers must do any
* required subsequent set-up of owning function or script object and then call
* js_CallNewScriptHook.
*/
extern JSBool
js_XDRScript(JSXDRState *xdr, JSScript **scriptp, JSBool *hasMagic);
js_XDRScript(JSXDRState *xdr, JSScript **scriptp);
inline bool
JSObject::isScript() const

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

@ -666,14 +666,25 @@ JS_PUBLIC_API(JSBool)
JS_XDRScriptObject(JSXDRState *xdr, JSObject **scriptObjp)
{
JSScript *script;
uint32 magic;
if (xdr->mode == JSXDR_DECODE) {
script = NULL;
*scriptObjp = NULL;
} else {
script = (*scriptObjp)->getScript();
magic = JSXDR_MAGIC_SCRIPT_CURRENT;
}
if (!js_XDRScript(xdr, &script, NULL))
if (!JS_XDRUint32(xdr, &magic))
return false;
if (magic != JSXDR_MAGIC_SCRIPT_CURRENT) {
/* We do not provide binary compatibility with older scripts. */
JS_ReportErrorNumber(xdr->cx, js_GetErrorMessage, NULL, JSMSG_BAD_SCRIPT_MAGIC);
return false;
}
if (!js_XDRScript(xdr, &script))
return false;
if (xdr->mode == JSXDR_DECODE) {