зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1275746 - Don't allow empty host name for URLTYPE_AUTHORITY URLs r=mcmanus
* Return NS_ERROR_MALFORMED_URI if mURLType is URLTYPE_AUTHORITY and the hostname is empty. * Make sure nsStandardURL::SetFile calls init with the correct arguments MozReview-Commit-ID: 7t3mZtAbMF3
This commit is contained in:
Родитель
1c9bfb2ba1
Коммит
ff510f7133
|
@ -1554,6 +1554,11 @@ nsStandardURL::SetSpec(const nsACString &input)
|
|||
rv = BuildNormalizedSpec(spec);
|
||||
}
|
||||
|
||||
// Make sure that a URLTYPE_AUTHORITY has a non-empty hostname.
|
||||
if (mURLType == URLTYPE_AUTHORITY && mHost.mLen == -1) {
|
||||
rv = NS_ERROR_MALFORMED_URI;
|
||||
}
|
||||
|
||||
if (NS_FAILED(rv)) {
|
||||
Clear();
|
||||
// If parsing the spec has failed, restore the old URL
|
||||
|
@ -3182,20 +3187,26 @@ nsStandardURL::SetFile(nsIFile *file)
|
|||
rv = net_GetURLSpecFromFile(file, url);
|
||||
if (NS_FAILED(rv)) return rv;
|
||||
|
||||
SetSpec(url);
|
||||
uint32_t oldURLType = mURLType;
|
||||
uint32_t oldDefaultPort = mDefaultPort;
|
||||
rv = Init(nsIStandardURL::URLTYPE_NO_AUTHORITY, -1, url, nullptr, nullptr);
|
||||
|
||||
rv = Init(mURLType, mDefaultPort, url, nullptr, nullptr);
|
||||
if (NS_FAILED(rv)) {
|
||||
// Restore the old url type and default port if the call to Init fails.
|
||||
mURLType = oldURLType;
|
||||
mDefaultPort = oldDefaultPort;
|
||||
return rv;
|
||||
}
|
||||
|
||||
// must clone |file| since its value is not guaranteed to remain constant
|
||||
if (NS_SUCCEEDED(rv)) {
|
||||
InvalidateCache();
|
||||
if (NS_FAILED(file->Clone(getter_AddRefs(mFile)))) {
|
||||
NS_WARNING("nsIFile::Clone failed");
|
||||
// failure to clone is not fatal (GetFile will generate mFile)
|
||||
mFile = nullptr;
|
||||
}
|
||||
InvalidateCache();
|
||||
if (NS_FAILED(file->Clone(getter_AddRefs(mFile)))) {
|
||||
NS_WARNING("nsIFile::Clone failed");
|
||||
// failure to clone is not fatal (GetFile will generate mFile)
|
||||
mFile = nullptr;
|
||||
}
|
||||
return rv;
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
|
|
@ -92,18 +92,6 @@ var gTests = [
|
|||
ref: "",
|
||||
relativeURI: "data/text/plain,2",
|
||||
nsIURL: true, nsINestedURI: false },
|
||||
{ spec: "ftp://",
|
||||
scheme: "ftp",
|
||||
prePath: "ftp://",
|
||||
path: "/",
|
||||
ref: "",
|
||||
nsIURL: true, nsINestedURI: false },
|
||||
{ spec: "ftp:///",
|
||||
scheme: "ftp",
|
||||
prePath: "ftp://",
|
||||
path: "/",
|
||||
ref: "",
|
||||
nsIURL: true, nsINestedURI: false },
|
||||
{ spec: "ftp://ftp.mozilla.org/pub/mozilla.org/README",
|
||||
scheme: "ftp",
|
||||
prePath: "ftp://ftp.mozilla.org",
|
||||
|
@ -135,18 +123,6 @@ var gTests = [
|
|||
path: "//mozilla.org/",
|
||||
ref: "",
|
||||
nsIURL: false, nsINestedURI: false },
|
||||
{ spec: "http://",
|
||||
scheme: "http",
|
||||
prePath: "http://",
|
||||
path: "/",
|
||||
ref: "",
|
||||
nsIURL: true, nsINestedURI: false },
|
||||
{ spec: "http:///",
|
||||
scheme: "http",
|
||||
prePath: "http://",
|
||||
path: "/",
|
||||
ref: "",
|
||||
nsIURL: true, nsINestedURI: false },
|
||||
{ spec: "http://www.example.com/",
|
||||
scheme: "http",
|
||||
prePath: "http://www.example.com",
|
||||
|
|
|
@ -333,6 +333,14 @@ add_test(function test_backslashReplacement()
|
|||
run_next_test();
|
||||
});
|
||||
|
||||
add_test(function test_authority_host()
|
||||
{
|
||||
Assert.throws(() => { stringToURL("http:"); }, "TYPE_AUTHORITY should have host");
|
||||
Assert.throws(() => { stringToURL("http:///"); }, "TYPE_AUTHORITY should have host");
|
||||
|
||||
run_next_test();
|
||||
});
|
||||
|
||||
add_test(function test_trim_C0_and_space()
|
||||
{
|
||||
var url = stringToURL("\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f http://example.com/ \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f ");
|
||||
|
|
Загрузка…
Ссылка в новой задаче