зеркало из https://github.com/mozilla/gecko-dev.git
Bug 632253 - Move magic check to JS_XDRScript, r=igor
This commit is contained in:
Родитель
0994a69030
Коммит
20eca7a69e
|
@ -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) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче