forked from mirrors/gecko-dev
Bug 1433958 - Change code that sets nsIURI.host to use nsIURIMutator r=mayhemer
MozReview-Commit-ID: 7T5gCu8WOfa --HG-- extra : rebase_source : 752c34e5f9dde2e16fc9243c11860b987acbcb93
This commit is contained in:
parent
7f3b09b694
commit
27e9e0be9f
12 changed files with 55 additions and 42 deletions
|
|
@ -228,7 +228,9 @@ DomainSet::ContainsSuperDomain(nsIURI* aDomain, bool* aContains)
|
|||
if (index == kNotFound)
|
||||
break;
|
||||
domain.Assign(Substring(domain, index + 1));
|
||||
rv = clone->SetHost(domain);
|
||||
rv = NS_MutateURI(clone)
|
||||
.SetHost(domain)
|
||||
.Finalize(clone);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsIScriptContext.h"
|
||||
#include "nsIURL.h"
|
||||
#include "nsIURIMutator.h"
|
||||
#include "nsINestedURI.h"
|
||||
#include "nspr.h"
|
||||
#include "nsJSPrincipals.h"
|
||||
|
|
@ -533,10 +534,8 @@ DenyAccessIfURIHasFlags(nsIURI* aURI, uint32_t aURIFlags)
|
|||
static bool
|
||||
EqualOrSubdomain(nsIURI* aProbeArg, nsIURI* aBase)
|
||||
{
|
||||
// Make a clone of the incoming URI, because we're going to mutate it.
|
||||
nsCOMPtr<nsIURI> probe;
|
||||
nsresult rv = aProbeArg->Clone(getter_AddRefs(probe));
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
nsresult rv;
|
||||
nsCOMPtr<nsIURI> probe = aProbeArg;
|
||||
|
||||
nsCOMPtr<nsIEffectiveTLDService> tldService = do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID);
|
||||
NS_ENSURE_TRUE(tldService, false);
|
||||
|
|
@ -554,7 +553,9 @@ EqualOrSubdomain(nsIURI* aProbeArg, nsIURI* aBase)
|
|||
return false;
|
||||
}
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
rv = probe->SetHost(newHost);
|
||||
rv = NS_MutateURI(probe)
|
||||
.SetHost(newHost)
|
||||
.Finalize(probe);
|
||||
NS_ENSURE_SUCCESS(rv, false);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -512,7 +512,7 @@ nsDefaultURIFixup::TryKeywordFixupForURIInfo(const nsACString& aURIString,
|
|||
}
|
||||
|
||||
bool
|
||||
nsDefaultURIFixup::MakeAlternateURI(nsIURI* aURI)
|
||||
nsDefaultURIFixup::MakeAlternateURI(nsCOMPtr<nsIURI>& aURI)
|
||||
{
|
||||
if (!Preferences::GetRootBranch()) {
|
||||
return false;
|
||||
|
|
@ -607,7 +607,10 @@ nsDefaultURIFixup::MakeAlternateURI(nsIURI* aURI)
|
|||
}
|
||||
|
||||
// Assign the new host string over the old one
|
||||
aURI->SetHost(newHost);
|
||||
Unused << NS_MutateURI(aURI)
|
||||
.SetHost(newHost)
|
||||
.Finalize(aURI);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ private:
|
|||
nsDefaultURIFixupInfo* aFixupInfo,
|
||||
nsIInputStream** aPostData);
|
||||
bool PossiblyHostPortUrl(const nsACString& aUrl);
|
||||
bool MakeAlternateURI(nsIURI* aURI);
|
||||
bool MakeAlternateURI(nsCOMPtr<nsIURI>& aURI);
|
||||
bool IsDomainWhitelisted(const nsACString& aAsciiHost,
|
||||
const uint32_t aDotLoc);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -501,13 +501,18 @@ Link::SetHost(const nsAString &aHost)
|
|||
void
|
||||
Link::SetHostname(const nsAString &aHostname)
|
||||
{
|
||||
nsCOMPtr<nsIURI> uri(GetURIToMutate());
|
||||
nsCOMPtr<nsIURI> uri(GetURI());
|
||||
if (!uri) {
|
||||
// Ignore failures to be compatible with NS4.
|
||||
return;
|
||||
}
|
||||
|
||||
(void)uri->SetHost(NS_ConvertUTF16toUTF8(aHostname));
|
||||
nsresult rv = NS_MutateURI(uri)
|
||||
.SetHost(NS_ConvertUTF16toUTF8(aHostname))
|
||||
.Finalize(uri);
|
||||
if (NS_FAILED(rv)) {
|
||||
return;
|
||||
}
|
||||
SetHrefAttribute(uri);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -407,12 +407,14 @@ Location::SetHostname(const nsAString& aHostname,
|
|||
}
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
aRv = GetWritableURI(getter_AddRefs(uri));
|
||||
aRv = GetURI(getter_AddRefs(uri));
|
||||
if (NS_WARN_IF(aRv.Failed()) || !uri) {
|
||||
return;
|
||||
}
|
||||
|
||||
aRv = uri->SetHost(NS_ConvertUTF16toUTF8(aHostname));
|
||||
aRv = NS_MutateURI(uri)
|
||||
.SetHost(NS_ConvertUTF16toUTF8(aHostname))
|
||||
.Finalize(uri);
|
||||
if (NS_WARN_IF(aRv.Failed())) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -353,7 +353,9 @@ URLMainThread::SetHostname(const nsAString& aHostname, ErrorResult& aRv)
|
|||
{
|
||||
// nsStandardURL returns NS_ERROR_UNEXPECTED for an empty hostname
|
||||
// The return code is silently ignored
|
||||
mURI->SetHost(NS_ConvertUTF16toUTF8(aHostname));
|
||||
mozilla::Unused << NS_MutateURI(mURI)
|
||||
.SetHost(NS_ConvertUTF16toUTF8(aHostname))
|
||||
.Finalize(mURI);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "mozilla/Attributes.h"
|
||||
#include "nsXULAppAPI.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsIURIMutator.h"
|
||||
#include "nsContentUtils.h"
|
||||
#include "nsIScriptSecurityManager.h"
|
||||
#include "nsIEffectiveTLDService.h"
|
||||
|
|
@ -296,16 +297,13 @@ GetNextSubDomainURI(nsIURI* aURI)
|
|||
}
|
||||
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
rv = aURI->Clone(getter_AddRefs(uri));
|
||||
rv = NS_MutateURI(aURI)
|
||||
.SetHost(domain)
|
||||
.Finalize(uri);
|
||||
if (NS_FAILED(rv) || !uri) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
rv = uri->SetHost(domain);
|
||||
if (NS_FAILED(rv)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return uri.forget();
|
||||
}
|
||||
|
||||
|
|
@ -664,7 +662,9 @@ UpgradeHostToOriginAndInsert(const nsACString& aHost, const nsCString& aType,
|
|||
if (NS_WARN_IF(NS_FAILED(rv))) continue;
|
||||
|
||||
// Use the provided host - this URI may be for a subdomain, rather than the host we care about.
|
||||
rv = uri->SetHost(aHost);
|
||||
rv = NS_MutateURI(uri)
|
||||
.SetHost(aHost)
|
||||
.Finalize(uri);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) continue;
|
||||
|
||||
// We now have a URI which we can make a nsIPrincipal out of
|
||||
|
|
|
|||
|
|
@ -526,8 +526,7 @@ function do_test_immutable(aTest) {
|
|||
|
||||
var URI = NetUtil.newURI(aTest.spec);
|
||||
// All the non-readonly attributes on nsIURI.idl:
|
||||
var propertiesToCheck = ["spec", "scheme",
|
||||
"host"];
|
||||
var propertiesToCheck = ["spec", "scheme"];
|
||||
|
||||
propertiesToCheck.forEach(function(aProperty) {
|
||||
var threw = false;
|
||||
|
|
|
|||
|
|
@ -627,8 +627,7 @@ function do_test_immutable(aTest) {
|
|||
|
||||
var URI = NetUtil.newURI(aTest.spec);
|
||||
// All the non-readonly attributes on nsIURI.idl:
|
||||
var propertiesToCheck = ["scheme",
|
||||
"host"];
|
||||
var propertiesToCheck = ["scheme"];
|
||||
|
||||
propertiesToCheck.forEach(function(aProperty) {
|
||||
var threw = false;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ function run_test() {
|
|||
|
||||
success = false;
|
||||
try {
|
||||
newURI.host = " foo.com";
|
||||
newURI = newURI.mutate().setHost(" foo.com").finalize();
|
||||
}
|
||||
catch (e) {
|
||||
success = e.result == Cr.NS_ERROR_MALFORMED_URI;
|
||||
|
|
|
|||
|
|
@ -169,7 +169,7 @@ add_test(function test_setRef()
|
|||
add_test(function test_ipv6()
|
||||
{
|
||||
var url = stringToURL("http://example.com");
|
||||
url.host = "[2001::1]";
|
||||
url = url.mutate().setHost("[2001::1]").finalize();
|
||||
Assert.equal(url.host, "2001::1");
|
||||
|
||||
url = stringToURL("http://example.com");
|
||||
|
|
@ -190,14 +190,14 @@ add_test(function test_ipv6_fail()
|
|||
{
|
||||
var url = stringToURL("http://example.com");
|
||||
|
||||
Assert.throws(() => { url.host = "2001::1"; }, "missing brackets");
|
||||
Assert.throws(() => { url.host = "[2001::1]:20"; }, "url.host with port");
|
||||
Assert.throws(() => { url.host = "[2001::1"; }, "missing last bracket");
|
||||
Assert.throws(() => { url.host = "2001::1]"; }, "missing first bracket");
|
||||
Assert.throws(() => { url.host = "2001[::1]"; }, "bad bracket position");
|
||||
Assert.throws(() => { url.host = "[]"; }, "empty IPv6 address");
|
||||
Assert.throws(() => { url.host = "[hello]"; }, "bad IPv6 address");
|
||||
Assert.throws(() => { url.host = "[192.168.1.1]"; }, "bad IPv6 address");
|
||||
Assert.throws(() => { url = url.mutate().setHost("2001::1").finalize(); }, "missing brackets");
|
||||
Assert.throws(() => { url = url.mutate().setHost("[2001::1]:20").finalize(); }, "url.host with port");
|
||||
Assert.throws(() => { url = url.mutate().setHost("[2001::1").finalize(); }, "missing last bracket");
|
||||
Assert.throws(() => { url = url.mutate().setHost("2001::1]").finalize(); }, "missing first bracket");
|
||||
Assert.throws(() => { url = url.mutate().setHost("2001[::1]").finalize(); }, "bad bracket position");
|
||||
Assert.throws(() => { url = url.mutate().setHost("[]").finalize(); }, "empty IPv6 address");
|
||||
Assert.throws(() => { url = url.mutate().setHost("[hello]").finalize(); }, "bad IPv6 address");
|
||||
Assert.throws(() => { url = url.mutate().setHost("[192.168.1.1]").finalize(); }, "bad IPv6 address");
|
||||
Assert.throws(() => { url = url.mutate().setHostPort("2001::1").finalize(); }, "missing brackets");
|
||||
Assert.throws(() => { url = url.mutate().setHostPort("[2001::1]30").finalize(); }, "missing : after IP");
|
||||
Assert.throws(() => { url = url.mutate().setHostPort("[2001:1]").finalize(); }, "bad IPv6 address");
|
||||
|
|
@ -219,7 +219,7 @@ add_test(function test_clearedSpec()
|
|||
Assert.throws(() => { url = url.mutate().setSpec("http: example").finalize(); }, "set bad spec");
|
||||
Assert.throws(() => { url = url.mutate().setSpec("").finalize(); }, "set empty spec");
|
||||
Assert.equal(url.spec, "http://example.com/path");
|
||||
url.host = "allizom.org";
|
||||
url = url.mutate().setHost("allizom.org").finalize().QueryInterface(Ci.nsIURL);
|
||||
|
||||
var ref = stringToURL("http://allizom.org/path");
|
||||
symmetricEquality(true, url, ref);
|
||||
|
|
@ -301,8 +301,7 @@ add_test(function test_hugeStringThrows()
|
|||
let url = stringToURL("http://test:test@example.com");
|
||||
|
||||
let hugeString = new Array(maxLen + 1).fill("a").join("");
|
||||
let properties = ["scheme",
|
||||
"host"];
|
||||
let properties = ["scheme"];
|
||||
for (let prop of properties) {
|
||||
Assert.throws(() => url[prop] = hugeString,
|
||||
/NS_ERROR_MALFORMED_URI/,
|
||||
|
|
@ -315,6 +314,7 @@ add_test(function test_hugeStringThrows()
|
|||
{ method: "setPassword", qi: Ci.nsIURIMutator },
|
||||
{ method: "setFilePath", qi: Ci.nsIURIMutator },
|
||||
{ method: "setHostPort", qi: Ci.nsIURIMutator },
|
||||
{ method: "setHost", qi: Ci.nsIURIMutator },
|
||||
{ method: "setUserPass", qi: Ci.nsIURIMutator },
|
||||
{ method: "setPathQueryRef", qi: Ci.nsIURIMutator },
|
||||
{ method: "setQuery", qi: Ci.nsIURIMutator },
|
||||
|
|
@ -474,7 +474,7 @@ add_test(function test_ipv4Normalize()
|
|||
}
|
||||
|
||||
var url = stringToURL("resource://path/to/resource/");
|
||||
url.host = "123";
|
||||
url = url.mutate().setHost("123").finalize();
|
||||
Assert.equal(url.host, "123");
|
||||
|
||||
run_next_test();
|
||||
|
|
@ -483,10 +483,10 @@ add_test(function test_ipv4Normalize()
|
|||
add_test(function test_invalidHostChars() {
|
||||
var url = stringToURL("http://example.org/");
|
||||
for (let i = 0; i <= 0x20; i++) {
|
||||
Assert.throws(() => { url.host = "a" + String.fromCharCode(i) + "b"; }, "Trying to set hostname containing char code: " + i);
|
||||
Assert.throws(() => { url = url.mutate().setHost("a" + String.fromCharCode(i) + "b").finalize(); }, "Trying to set hostname containing char code: " + i);
|
||||
}
|
||||
for (let c of "@[]*<>|:\"") {
|
||||
Assert.throws(() => { url.host = "a" + c; }, "Trying to set hostname containing char: " + c);
|
||||
Assert.throws(() => { url = url.mutate().setHost("a" + c).finalize(); }, "Trying to set hostname containing char: " + c);
|
||||
}
|
||||
|
||||
// It also can't contain /, \, #, ?, but we treat these characters as
|
||||
|
|
@ -496,7 +496,7 @@ add_test(function test_invalidHostChars() {
|
|||
|
||||
add_test(function test_normalize_ipv6() {
|
||||
var url = stringToURL("http://example.com");
|
||||
url.host = "[::192.9.5.5]";
|
||||
url = url.mutate().setHost("[::192.9.5.5]").finalize();
|
||||
Assert.equal(url.spec, "http://[::c009:505]/");
|
||||
|
||||
run_next_test();
|
||||
|
|
|
|||
Loading…
Reference in a new issue