From 31725d8b36fba9bb7810a3e6729a5c6c06de6b74 Mon Sep 17 00:00:00 2001 From: Blake Kaplan Date: Wed, 13 Oct 2010 11:37:25 -0700 Subject: [PATCH] Bug 603845 - Protect ourselves against compartments that have null principals. r=gal --- js/src/xpconnect/wrappers/AccessCheck.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/js/src/xpconnect/wrappers/AccessCheck.cpp b/js/src/xpconnect/wrappers/AccessCheck.cpp index ea989b82fda5..e21da3dedba7 100644 --- a/js/src/xpconnect/wrappers/AccessCheck.cpp +++ b/js/src/xpconnect/wrappers/AccessCheck.cpp @@ -60,9 +60,17 @@ GetCompartmentPrincipal(JSCompartment *compartment) bool AccessCheck::isSameOrigin(JSCompartment *a, JSCompartment *b) { + nsIPrincipal *aprin = GetCompartmentPrincipal(a); + nsIPrincipal *bprin = GetCompartmentPrincipal(b); + + // If either a or b doesn't have principals, we don't have enough + // information to tell. Seeing as how this is Gecko, we are default-unsafe + // in this case. + if (!aprin || !bprin) + return true; + PRBool cond; - return NS_SUCCEEDED(GetCompartmentPrincipal(a)->Equals(GetCompartmentPrincipal(b), &cond)) && - cond; + return NS_SUCCEEDED(aprin->Equals(bprin, &cond)) && cond; } bool