Bug 1247806 - Fix HSTS redirect check in WebSocketChannel, r=mcmanus

This commit is contained in:
Michal Novotny 2016-02-16 01:19:57 +01:00
Родитель 94580e525f
Коммит 1833733f5d
1 изменённых файлов: 2 добавлений и 23 удалений

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

@ -2997,29 +2997,8 @@ WebSocketChannel::AsyncOnChannelRedirect(
// Even if redirects configured off, still allow them for HTTP Strict // Even if redirects configured off, still allow them for HTTP Strict
// Transport Security (from ws://FOO to https://FOO (mapped to wss://FOO) // Transport Security (from ws://FOO to https://FOO (mapped to wss://FOO)
nsCOMPtr<nsIURI> clonedNewURI; if (!(flags & (nsIChannelEventSink::REDIRECT_INTERNAL |
rv = newuri->Clone(getter_AddRefs(clonedNewURI)); nsIChannelEventSink::REDIRECT_STS_UPGRADE))) {
NS_ENSURE_SUCCESS(rv, rv);
rv = clonedNewURI->SetScheme(NS_LITERAL_CSTRING("ws"));
NS_ENSURE_SUCCESS(rv, rv);
nsCOMPtr<nsIURI> currentURI;
rv = GetURI(getter_AddRefs(currentURI));
NS_ENSURE_SUCCESS(rv, rv);
// currentURI is expected to be ws or wss
bool currentIsHttps = false;
rv = currentURI->SchemeIs("wss", &currentIsHttps);
NS_ENSURE_SUCCESS(rv, rv);
bool uriEqual = false;
rv = clonedNewURI->Equals(currentURI, &uriEqual);
NS_ENSURE_SUCCESS(rv, rv);
// It's only a HSTS redirect if we started with non-secure, are going to
// secure, and the new URI is otherwise the same as the old one.
if (!(!currentIsHttps && newuriIsHttps && uriEqual)) {
nsAutoCString newSpec; nsAutoCString newSpec;
rv = newuri->GetSpec(newSpec); rv = newuri->GetSpec(newSpec);
NS_ENSURE_SUCCESS(rv, rv); NS_ENSURE_SUCCESS(rv, rv);