From 7e05f50fe703918b7886582e1334594c80e2251b Mon Sep 17 00:00:00 2001 From: amrita Date: Thu, 17 Aug 2023 12:06:15 +0545 Subject: [PATCH 1/2] avoid header overwrite with empty array --- lib/Client.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/Client.php b/lib/Client.php index 2bc7483..a17dc41 100644 --- a/lib/Client.php +++ b/lib/Client.php @@ -402,7 +402,10 @@ protected function createCurlSettingsArray(RequestInterface $request): array $nHeaders[] = $key.': '.$value; } } - $settings[CURLOPT_HTTPHEADER] = $nHeaders; + + if(!empty($nHeaders)){ + $settings[CURLOPT_HTTPHEADER] = $nHeaders; + } $settings[CURLOPT_URL] = $request->getUrl(); // FIXME: CURLOPT_PROTOCOLS is currently unsupported by HHVM if (defined('CURLOPT_PROTOCOLS')) { From 9a438d06adb8d78bf1ac97e58415202b3c4a8872 Mon Sep 17 00:00:00 2001 From: amrita Date: Thu, 17 Aug 2023 14:01:57 +0545 Subject: [PATCH 2/2] add unit test coverage --- lib/Client.php | 4 ++-- tests/HTTP/ClientTest.php | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lib/Client.php b/lib/Client.php index a17dc41..0837e8d 100644 --- a/lib/Client.php +++ b/lib/Client.php @@ -402,8 +402,8 @@ protected function createCurlSettingsArray(RequestInterface $request): array $nHeaders[] = $key.': '.$value; } } - - if(!empty($nHeaders)){ + + if ([] !== $nHeaders) { $settings[CURLOPT_HTTPHEADER] = $nHeaders; } $settings[CURLOPT_URL] = $request->getUrl(); diff --git a/tests/HTTP/ClientTest.php b/tests/HTTP/ClientTest.php index b014b62..0fef774 100644 --- a/tests/HTTP/ClientTest.php +++ b/tests/HTTP/ClientTest.php @@ -34,6 +34,33 @@ public function testCreateCurlSettingsArrayGET() $this->assertEquals($settings, $client->createCurlSettingsArray($request)); } + public function testCreateCurlSettingsHTTPHeader(): void + { + $client = new ClientMock(); + $header = [ + 'Authorization: Bearer 12345', + ]; + $client->addCurlSetting(CURLOPT_POSTREDIR, 0); + $client->addCurlSetting(CURLOPT_HTTPHEADER, $header); + + $request = new Request('GET', 'http://example.org/'); + + $settings = [ + CURLOPT_RETURNTRANSFER => true, + CURLOPT_HEADER => true, + CURLOPT_POSTREDIR => 0, + CURLOPT_HTTPHEADER => ['Authorization: Bearer 12345'], + CURLOPT_NOBODY => false, + CURLOPT_URL => 'http://example.org/', + CURLOPT_CUSTOMREQUEST => 'GET', + CURLOPT_USERAGENT => 'sabre-http/'.Version::VERSION.' (http://sabre.io/)', + CURLOPT_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, + CURLOPT_REDIR_PROTOCOLS => CURLPROTO_HTTP | CURLPROTO_HTTPS, + ]; + + self::assertEquals($settings, $client->createCurlSettingsArray($request)); + } + public function testCreateCurlSettingsArrayHEAD() { $client = new ClientMock();