Bug 993772 - Stop serializing principals along with scripts. r=mrbkap

The principal of a script is determined by the compartment these days, so this
field is useless.
This commit is contained in:
Bobby Holley 2014-04-20 11:48:13 -07:00
Родитель 41724a80a8
Коммит 598e9fa905
8 изменённых файлов: 17 добавлений и 40 удалений

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

@ -46,7 +46,7 @@ FreezeThaw(JSContext *cx, JS::HandleScript script)
// thaw
JSScript *script2 = JS_DecodeScript(cx, memory, nbytes,
script->principals(), script->originPrincipals());
script->originPrincipals());
js_free(memory);
return script2;
}
@ -70,7 +70,6 @@ FreezeThaw(JSContext *cx, JS::HandleObject funobj)
// thaw
JSScript *script = GetScript(cx, funobj);
JSObject *funobj2 = JS_DecodeInterpretedFunction(cx, memory, nbytes,
script->principals(),
script->originPrincipals());
js_free(memory);
return funobj2;

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

@ -6341,9 +6341,9 @@ JS_EncodeInterpretedFunction(JSContext *cx, HandleObject funobjArg, uint32_t *le
JS_PUBLIC_API(JSScript *)
JS_DecodeScript(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals)
JSPrincipals *originPrincipals)
{
XDRDecoder decoder(cx, data, length, principals, originPrincipals);
XDRDecoder decoder(cx, data, length, originPrincipals);
RootedScript script(cx);
if (!decoder.codeScript(&script))
return nullptr;
@ -6352,9 +6352,9 @@ JS_DecodeScript(JSContext *cx, const void *data, uint32_t length,
JS_PUBLIC_API(JSObject *)
JS_DecodeInterpretedFunction(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals)
JSPrincipals *originPrincipals)
{
XDRDecoder decoder(cx, data, length, principals, originPrincipals);
XDRDecoder decoder(cx, data, length, originPrincipals);
RootedObject funobj(cx);
if (!decoder.codeFunction(&funobj))
return nullptr;

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

@ -4762,12 +4762,11 @@ extern JS_PUBLIC_API(void *)
JS_EncodeInterpretedFunction(JSContext *cx, JS::HandleObject funobj, uint32_t *lengthp);
extern JS_PUBLIC_API(JSScript *)
JS_DecodeScript(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals);
JS_DecodeScript(JSContext *cx, const void *data, uint32_t length, JSPrincipals *originPrincipals);
extern JS_PUBLIC_API(JSObject *)
JS_DecodeInterpretedFunction(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals);
JSPrincipals *originPrincipals);
namespace JS {

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

@ -1215,8 +1215,7 @@ Evaluate(JSContext *cx, unsigned argc, jsval *vp)
}
if (loadBytecode) {
script = JS_DecodeScript(cx, loadBuffer, loadLength, cx->compartment()->principals,
options.originPrincipals(cx));
script = JS_DecodeScript(cx, loadBuffer, loadLength, options.originPrincipals(cx));
} else {
script = JS::Compile(cx, global, options, codeChars, codeLength);
}

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

@ -122,12 +122,11 @@ XDRState<mode>::codeConstValue(MutableHandleValue vp)
}
XDRDecoder::XDRDecoder(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals)
JSPrincipals *originPrincipals)
: XDRState<XDR_DECODE>(cx)
{
buf.setData(data, length);
this->principals_ = principals;
this->originPrincipals_ = NormalizeOriginPrincipals(principals, originPrincipals);
this->originPrincipals_ = originPrincipals;
}
template class js::XDRState<XDR_ENCODE>;

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

@ -95,11 +95,10 @@ class XDRState {
XDRBuffer buf;
protected:
JSPrincipals *principals_;
JSPrincipals *originPrincipals_;
XDRState(JSContext *cx)
: buf(cx), principals_(nullptr), originPrincipals_(nullptr) {
: buf(cx), originPrincipals_(nullptr) {
}
public:
@ -256,7 +255,7 @@ class XDREncoder : public XDRState<XDR_ENCODE> {
class XDRDecoder : public XDRState<XDR_DECODE> {
public:
XDRDecoder(JSContext *cx, const void *data, uint32_t length,
JSPrincipals *principals, JSPrincipals *originPrincipals);
JSPrincipals *originPrincipals);
};

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

@ -28,7 +28,7 @@ ReadCachedScript(StartupCache* cache, nsACString &uri, JSContext *cx,
if (NS_FAILED(rv))
return rv; // don't warn since NOT_AVAILABLE is an ok error
scriptp.set(JS_DecodeScript(cx, buf, len, nsJSPrincipals::get(systemPrincipal), nullptr));
scriptp.set(JS_DecodeScript(cx, buf, len, nullptr));
if (!scriptp)
return NS_ERROR_OUT_OF_MEMORY;
return NS_OK;

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

@ -1360,7 +1360,8 @@ nsXPConnect::NotifyDidPaint()
return NS_OK;
}
static const uint8_t HAS_PRINCIPALS_FLAG = 1;
// Note - We used to have HAS_PRINCIPALS_FLAG = 1 here, so reusing that flag
// will require bumping the XDR version number.
static const uint8_t HAS_ORIGIN_PRINCIPALS_FLAG = 2;
static nsresult
@ -1382,8 +1383,6 @@ WriteScriptOrFunction(nsIObjectOutputStream *stream, JSContext *cx,
nsJSPrincipals::get(JS_GetScriptOriginPrincipals(script));
uint8_t flags = 0;
if (principal)
flags |= HAS_PRINCIPALS_FLAG;
// Optimize for the common case when originPrincipals == principals. As
// originPrincipals is set to principals when the former is null we can
@ -1395,12 +1394,6 @@ WriteScriptOrFunction(nsIObjectOutputStream *stream, JSContext *cx,
if (NS_FAILED(rv))
return rv;
if (flags & HAS_PRINCIPALS_FLAG) {
rv = stream->WriteObject(principal, true);
if (NS_FAILED(rv))
return rv;
}
if (flags & HAS_ORIGIN_PRINCIPALS_FLAG) {
rv = stream->WriteObject(originPrincipal, true);
if (NS_FAILED(rv))
@ -1439,17 +1432,6 @@ ReadScriptOrFunction(nsIObjectInputStream *stream, JSContext *cx,
if (NS_FAILED(rv))
return rv;
nsJSPrincipals* principal = nullptr;
nsCOMPtr<nsIPrincipal> readPrincipal;
if (flags & HAS_PRINCIPALS_FLAG) {
nsCOMPtr<nsISupports> supports;
rv = stream->ReadObject(true, getter_AddRefs(supports));
if (NS_FAILED(rv))
return rv;
readPrincipal = do_QueryInterface(supports);
principal = nsJSPrincipals::get(readPrincipal);
}
nsJSPrincipals* originPrincipal = nullptr;
nsCOMPtr<nsIPrincipal> readOriginPrincipal;
if (flags & HAS_ORIGIN_PRINCIPALS_FLAG) {
@ -1473,14 +1455,14 @@ ReadScriptOrFunction(nsIObjectInputStream *stream, JSContext *cx,
{
if (scriptp) {
JSScript *script = JS_DecodeScript(cx, data, size, principal, originPrincipal);
JSScript *script = JS_DecodeScript(cx, data, size, originPrincipal);
if (!script)
rv = NS_ERROR_OUT_OF_MEMORY;
else
*scriptp = script;
} else {
JSObject *funobj = JS_DecodeInterpretedFunction(cx, data, size,
principal, originPrincipal);
originPrincipal);
if (!funobj)
rv = NS_ERROR_OUT_OF_MEMORY;
else