Bug 660066 patch 1: Null-check mPrincipal in nsFileDataURI::EqualsInternal. r=bz

This commit is contained in:
Daniel Holbert 2011-05-27 16:53:06 -07:00
parent c47ae25a87
commit 10cede3f4c
2 changed files with 32 additions and 7 deletions

View File

@ -257,15 +257,20 @@ nsFileDataURI::EqualsInternal(nsIURI* aOther,
return NS_OK;
}
nsresult rv = mPrincipal->Equals(otherFileDataUri->mPrincipal, aResult);
NS_ENSURE_SUCCESS(rv, rv);
if (!*aResult) {
// Compare the member data that our base class knows about.
if (!nsSimpleURI::EqualsInternal(otherFileDataUri, aRefHandlingMode)) {
*aResult = PR_FALSE;
return NS_OK;
}
}
return nsSimpleURI::EqualsInternal(otherFileDataUri, aRefHandlingMode,
aResult);
// Compare the piece of additional member data that we add to base class.
if (mPrincipal && otherFileDataUri->mPrincipal) {
// Both of us have mPrincipals. Compare them.
return mPrincipal->Equals(otherFileDataUri->mPrincipal, aResult);
}
// else, at least one of us lacks a principal; only equal if *both* lack it.
*aResult = (!mPrincipal && !otherFileDataUri->mPrincipal);
return NS_OK;
}
// nsIClassInfo methods:

View File

@ -125,6 +125,12 @@ var gTests = [
path: "new%20Date()",
ref: "",
nsIURL: false, nsINestedURI: false },
{ spec: "moz-filedata:123456",
scheme: "moz-filedata",
prePath: "moz-filedata:",
path: "123456",
ref: "",
nsIURL: false, nsINestedURI: false, immutable: true },
{ spec: "place:redirectsMode=2&sort=8&maxResults=10",
scheme: "place",
prePath: "place:",
@ -257,6 +263,20 @@ function do_test_uri_basic(aTest) {
do_check_eq(URI instanceof Ci.nsINestedURI,
aTest.nsINestedURI);
do_info("testing that " + aTest.spec + " throws or returns false " +
"from equals(null)");
// XXXdholbert At some point it'd probably be worth making this behavior
// (throwing vs. returning false) consistent across URI implementations.
var threw = false;
var isEqualToNull;
try {
isEqualToNull = URI.equals(null);
} catch(e) {
threw = true;
}
do_check_true(threw || !isEqualToNull);
// Check the various components
do_check_property(aTest, URI, "scheme");
do_check_property(aTest, URI, "prePath");