Bug 1397621 - Ensure we use the proper default port for origin matching with h2 pushes. r?mcmanus draft
authorNicholas Hurley <hurley@mozilla.com>
Mon, 18 Sep 2017 16:09:57 -0700
changeset 666519 6e714e8670fc406fc112ac9c71a39ed838f96094
parent 666416 42151fcd6cfc216d147730d0f2c6a2acd52d22fd
child 732152 2bfd3e77c66d915ba5c4a3bec6cce97f41bac659
push id80456
push userbmo:hurley@mozilla.com
push dateMon, 18 Sep 2017 23:16:47 +0000
reviewersmcmanus
bugs1397621
milestone57.0a1
Bug 1397621 - Ensure we use the proper default port for origin matching with h2 pushes. r?mcmanus MozReview-Commit-ID: AunviQkOjJO
netwerk/protocol/http/Http2Session.cpp
--- a/netwerk/protocol/http/Http2Session.cpp
+++ b/netwerk/protocol/http/Http2Session.cpp
@@ -1847,16 +1847,26 @@ Http2Session::RecvPushPromise(Http2Sessi
   rv = Http2Stream::MakeOriginURL(pushedStream->Origin(), pushedOrigin);
   nsAutoCString pushedHostName;
   int32_t pushedPort = -1;
   if (NS_SUCCEEDED(rv)) {
     rv = pushedOrigin->GetHost(pushedHostName);
   }
   if (NS_SUCCEEDED(rv)) {
     rv = pushedOrigin->GetPort(&pushedPort);
+    if (NS_SUCCEEDED(rv) && pushedPort == -1) {
+      // Need to get the right default port, so TestJoinConnection below can
+      // check things correctly. See bug 1397621.
+      bool isHttp = false;
+      if (NS_SUCCEEDED(pushedOrigin->SchemeIs("http", &isHttp)) && isHttp) {
+        pushedPort = NS_HTTP_DEFAULT_PORT;
+      } else {
+        pushedPort = NS_HTTPS_DEFAULT_PORT;
+      }
+    }
   }
   if (NS_FAILED(rv) ||
       !self->TestJoinConnection(pushedHostName, pushedPort)) {
     LOG3(("Http2Session::RecvPushPromise %p pushed stream mismatched origin %s\n",
           self, pushedStream->Origin().get()));
     self->CleanupStream(pushedStream, NS_ERROR_FAILURE, REFUSED_STREAM_ERROR);
     self->ResetDownstreamState();
     return NS_OK;