Fix bug 409885: don't do string-manipulation to set the domain on a URI.

r+sr+a=jst
This commit is contained in:
bzbarsky%mit.edu 2007-12-30 23:35:42 +00:00
Родитель 32c8e5b94f
Коммит 504fbeb90f
1 изменённых файлов: 9 добавлений и 12 удалений

Просмотреть файл

@ -1718,19 +1718,15 @@ nsHTMLDocument::SetDomain(const nsAString& aDomain)
return NS_ERROR_FAILURE;
}
nsCAutoString newURIString;
if (NS_FAILED(uri->GetScheme(newURIString)))
return NS_ERROR_FAILURE;
nsCAutoString path;
if (NS_FAILED(uri->GetPath(path)))
return NS_ERROR_FAILURE;
newURIString.AppendLiteral("://");
AppendUTF16toUTF8(aDomain, newURIString);
newURIString.Append(path);
nsCOMPtr<nsIURI> newURI;
if (NS_FAILED(NS_NewURI(getter_AddRefs(newURI), newURIString)))
return NS_ERROR_FAILURE;
nsresult rv = uri->Clone(getter_AddRefs(newURI));
NS_ENSURE_TRUE(newURI, rv);
rv = newURI->SetUserPass(EmptyCString());
NS_ENSURE_SUCCESS(rv, rv);
rv = newURI->SetHostPort(NS_ConvertUTF16toUTF8(aDomain));
NS_ENSURE_SUCCESS(rv, rv);
// Check new domain - must be a superdomain of the current host
// For example, a page from foo.bar.com may set domain to bar.com,
@ -1762,6 +1758,7 @@ nsHTMLDocument::SetDomain(const nsAString& aDomain)
return NS_ERROR_DOM_BAD_DOCUMENT_DOMAIN;
}
NS_TryToSetImmutable(newURI);
return NodePrincipal()->SetDomain(newURI);
}