From 37ac416621a85db3ef7b1ff8bd43f8ac54e080b7 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Wed, 23 Feb 2022 16:04:51 +0100 Subject: [PATCH] [HttpClient] Fix overriding default options with null --- src/Symfony/Component/HttpClient/HttpClientTrait.php | 6 +----- .../Component/HttpClient/Tests/MockHttpClientTest.php | 10 ++++++++++ 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/Symfony/Component/HttpClient/HttpClientTrait.php b/src/Symfony/Component/HttpClient/HttpClientTrait.php index 46ea64ffde4a5..c8351f55bc2ba 100644 --- a/src/Symfony/Component/HttpClient/HttpClientTrait.php +++ b/src/Symfony/Component/HttpClient/HttpClientTrait.php @@ -187,11 +187,7 @@ private static function mergeDefaultOptions(array $options, array $defaultOption // Option "query" is never inherited from defaults $options['query'] = $options['query'] ?? []; - foreach ($defaultOptions as $k => $v) { - if ('normalized_headers' !== $k && !isset($options[$k])) { - $options[$k] = $v; - } - } + $options += $defaultOptions; if (isset($defaultOptions['extra'])) { $options['extra'] += $defaultOptions['extra']; diff --git a/src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php b/src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php index 076604b0a6196..e324dc107be3f 100644 --- a/src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php +++ b/src/Symfony/Component/HttpClient/Tests/MockHttpClientTest.php @@ -14,6 +14,7 @@ use Symfony\Component\HttpClient\Chunk\DataChunk; use Symfony\Component\HttpClient\Chunk\ErrorChunk; use Symfony\Component\HttpClient\Chunk\FirstChunk; +use Symfony\Component\HttpClient\Exception\InvalidArgumentException; use Symfony\Component\HttpClient\Exception\TransportException; use Symfony\Component\HttpClient\MockHttpClient; use Symfony\Component\HttpClient\NativeHttpClient; @@ -150,6 +151,15 @@ public function testThrowExceptionInBodyGenerator() $this->assertSame('bar ccc', $chunks[2]->getError()); } + public function testMergeDefaultOptions() + { + $mockHttpClient = new MockHttpClient(null, 'https://example.com'); + + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Invalid URL: scheme is missing'); + $mockHttpClient->request('GET', '/foo', ['base_uri' => null]); + } + protected function getHttpClient(string $testCase): HttpClientInterface { $responses = [];