Fix support for HTTP/2 in MultiHttpClient
authorPaladox <thomasmulhall410@yahoo.com>
Sun, 1 Dec 2019 17:59:17 +0000 (17:59 +0000)
committerReedy <reedy@wikimedia.org>
Sun, 1 Dec 2019 19:42:30 +0000 (19:42 +0000)
Under buster, curl uses HTTP/2 (confirmed when running eval):

Buster:
GET xxx HTTP/2

Stretch:
GET xxx HTTP/1.1

The code presumes that it will always be HTTP/1.x.

We fix this by adjusting the regex to match HTTP2.

Bug: T232866
Change-Id: Ibde6036048d5939508df143ec5956abcd0718ad1

includes/libs/http/MultiHttpClient.php

index b195a08..b0c8a8b 100644 (file)
@@ -385,7 +385,7 @@ class MultiHttpClient implements LoggerAwareInterface {
                                }
                                $length = strlen( $header );
                                $matches = [];
-                               if ( preg_match( "/^(HTTP\/1\.[01]) (\d{3}) (.*)/", $header, $matches ) ) {
+                               if ( preg_match( "/^(HTTP\/(?:1\.[01]|2)) (\d{3}) (.*)/", $header, $matches ) ) {
                                        $req['response']['code'] = (int)$matches[2];
                                        $req['response']['reason'] = trim( $matches[3] );
                                        return $length;