moebius#130: URL parser - fix: don't allow empty host name

https://github.com/MoonchildProductions/moebius/issues/130
This commit is contained in:
janekptacijarabaci 2018-04-15 07:29:18 +02:00 committed by Roy Tam
commit 196fddddb6
14 changed files with 51 additions and 72 deletions

View file

@ -1483,6 +1483,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
@ -3092,20 +3097,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;
}
//----------------------------------------------------------------------------