Skip to content
Snippets Groups Projects

Bug 40491: Don't auto-pick a v2 address when it's in Onion-Location header

1 file
+ 29
10
Compare changes
  • Side-by-side
  • Inline
+ 29
10
@@ -6831,18 +6831,37 @@ void Document::GetHeaderData(nsAtom* aHeaderField, nsAString& aData) const {
static bool IsValidOnionLocation(nsIURI* aDocumentURI,
nsIURI* aOnionLocationURI) {
if (!aDocumentURI || !aOnionLocationURI) {
return false;
}
bool isHttpish;
nsAutoCString host;
return aDocumentURI && aOnionLocationURI &&
NS_SUCCEEDED(aDocumentURI->SchemeIs("https", &isHttpish)) &&
isHttpish && NS_SUCCEEDED(aDocumentURI->GetAsciiHost(host)) &&
!StringEndsWith(host, ".onion"_ns) &&
((NS_SUCCEEDED(aOnionLocationURI->SchemeIs("http", &isHttpish)) &&
isHttpish) ||
(NS_SUCCEEDED(aOnionLocationURI->SchemeIs("https", &isHttpish)) &&
isHttpish)) &&
NS_SUCCEEDED(aOnionLocationURI->GetAsciiHost(host)) &&
StringEndsWith(host, ".onion"_ns);
if (!(NS_SUCCEEDED(aDocumentURI->SchemeIs("https", &isHttpish)) &&
isHttpish) ||
!(NS_SUCCEEDED(aDocumentURI->GetAsciiHost(host)) &&
!StringEndsWith(host, ".onion"_ns))) {
return false;
}
if (!((NS_SUCCEEDED(aOnionLocationURI->SchemeIs("http", &isHttpish)) &&
isHttpish) ||
(NS_SUCCEEDED(aOnionLocationURI->SchemeIs("https", &isHttpish)) &&
isHttpish))) {
return false;
}
nsCOMPtr<nsIEffectiveTLDService> eTLDService =
do_GetService(NS_EFFECTIVETLDSERVICE_CONTRACTID);
if (!eTLDService) {
return NS_SUCCEEDED(aOnionLocationURI->GetAsciiHost(host)) &&
StringEndsWith(host, ".onion"_ns);
}
if (!NS_SUCCEEDED(eTLDService->GetBaseDomain(aOnionLocationURI, 0, host))) {
return false;
}
return (host.Length() == 62 && StringEndsWith(host, ".onion"_ns)) ||
StringEndsWith(host, ".tor.onion"_ns);
}
void Document::SetHeaderData(nsAtom* aHeaderField, const nsAString& aData) {
Loading