]> granicus.if.org Git - curl/commitdiff
http2: relax verification of :authority in push promise requests
authorChristoph M. Becker <cmbecker69@gmx.de>
Mon, 16 Sep 2019 13:32:58 +0000 (15:32 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 16 Sep 2019 21:36:22 +0000 (23:36 +0200)
If the :authority pseudo header field doesn't contain an explicit port,
we assume it is valid for the default port, instead of rejecting the
request for all ports.

Ref: https://curl.haxx.se/mail/lib-2019-09/0041.html

Closes #4365

lib/http2.c

index 31d2d698ade7eff84d27c8d22b17c061934484a0..47583265d432853b1901dc43d273db1b51a2d438 100644 (file)
@@ -967,7 +967,9 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
       if(!check)
         /* no memory */
         return NGHTTP2_ERR_CALLBACK_FAILURE;
-      if(!Curl_strcasecompare(check, (const char *)value)) {
+      if(!Curl_strcasecompare(check, (const char *)value) &&
+         ((conn->remote_port != conn->given->defport) ||
+          !Curl_strcasecompare(conn->host.name, (const char *)value))) {
         /* This is push is not for the same authority that was asked for in
          * the URL. RFC 7540 section 8.2 says: "A client MUST treat a
          * PUSH_PROMISE for which the server is not authoritative as a stream