Skip to content
Snippets Groups Projects

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

All threads resolved!
+ 19
15
@@ -6835,31 +6835,35 @@ static bool IsValidOnionLocation(nsIURI* aDocumentURI,
return false;
}
bool isHttpish;
// Current URI
bool isHttpish = false;
nsAutoCString host;
if (!(NS_SUCCEEDED(aDocumentURI->SchemeIs("https", &isHttpish)) &&
isHttpish) ||
!(NS_SUCCEEDED(aDocumentURI->GetAsciiHost(host)) &&
!StringEndsWith(host, ".onion"_ns))) {
NS_ENSURE_SUCCESS(aDocumentURI->SchemeIs("https", &isHttpish), false);
if (!isHttpish) {
return false;
}
if (!((NS_SUCCEEDED(aOnionLocationURI->SchemeIs("http", &isHttpish)) &&
isHttpish) ||
(NS_SUCCEEDED(aOnionLocationURI->SchemeIs("https", &isHttpish)) &&
isHttpish))) {
NS_ENSURE_SUCCESS(aDocumentURI->GetAsciiHost(host), false);
if (StringEndsWith(host, ".onion"_ns)) {
// Already in the .onoin site
return false;
}
// Target URI
NS_ENSURE_SUCCESS(aOnionLocationURI->SchemeIs("http", &isHttpish), false);
if (!isHttpish) {
NS_ENSURE_SUCCESS(aOnionLocationURI->SchemeIs("https", &isHttpish), false);
if (!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;
NS_ENSURE_SUCCESS(aOnionLocationURI->GetAsciiHost(host), false);
return StringEndsWith(host, ".onion"_ns);
}
NS_ENSURE_SUCCESS(eTLDService->GetBaseDomain(aOnionLocationURI, 0, host),
false);
return (host.Length() == 62 && StringEndsWith(host, ".onion"_ns)) ||
StringEndsWith(host, ".tor.onion"_ns);
}
Loading