From abddada74bb1edf2edca4ed3c14a9e03e9353e6e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Auswo=CC=88ger?= Date: Fri, 9 Sep 2022 13:48:55 +0200 Subject: [PATCH] [HttpFoundation] Always return strings from accept headers --- src/Symfony/Component/HttpFoundation/Request.php | 9 +++++---- .../Component/HttpFoundation/Tests/RequestTest.php | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/Symfony/Component/HttpFoundation/Request.php b/src/Symfony/Component/HttpFoundation/Request.php index 4b2c4d96752c4..32e07b532e379 100644 --- a/src/Symfony/Component/HttpFoundation/Request.php +++ b/src/Symfony/Component/HttpFoundation/Request.php @@ -1646,7 +1646,8 @@ public function getLanguages() $languages = AcceptHeader::fromString($this->headers->get('Accept-Language'))->all(); $this->languages = []; - foreach ($languages as $lang => $acceptHeaderItem) { + foreach ($languages as $acceptHeaderItem) { + $lang = $acceptHeaderItem->getValue(); if (str_contains($lang, '-')) { $codes = explode('-', $lang); if ('i' === $codes[0]) { @@ -1684,7 +1685,7 @@ public function getCharsets() return $this->charsets; } - return $this->charsets = array_keys(AcceptHeader::fromString($this->headers->get('Accept-Charset'))->all()); + return $this->charsets = array_map('strval', array_keys(AcceptHeader::fromString($this->headers->get('Accept-Charset'))->all())); } /** @@ -1698,7 +1699,7 @@ public function getEncodings() return $this->encodings; } - return $this->encodings = array_keys(AcceptHeader::fromString($this->headers->get('Accept-Encoding'))->all()); + return $this->encodings = array_map('strval', array_keys(AcceptHeader::fromString($this->headers->get('Accept-Encoding'))->all())); } /** @@ -1712,7 +1713,7 @@ public function getAcceptableContentTypes() return $this->acceptableContentTypes; } - return $this->acceptableContentTypes = array_keys(AcceptHeader::fromString($this->headers->get('Accept'))->all()); + return $this->acceptableContentTypes = array_map('strval', array_keys(AcceptHeader::fromString($this->headers->get('Accept'))->all())); } /** diff --git a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php index 6035dd5d32da9..060de405e58ae 100644 --- a/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php +++ b/src/Symfony/Component/HttpFoundation/Tests/RequestTest.php @@ -1582,6 +1582,20 @@ public function testGetLanguages() $this->assertEquals(['zh', 'cherokee'], $request->getLanguages()); } + public function testGetAcceptHeadersReturnString() + { + $request = new Request(); + $request->headers->set('Accept', '123'); + $request->headers->set('Accept-Charset', '123'); + $request->headers->set('Accept-Encoding', '123'); + $request->headers->set('Accept-Language', '123'); + + $this->assertSame(['123'], $request->getAcceptableContentTypes()); + $this->assertSame(['123'], $request->getCharsets()); + $this->assertSame(['123'], $request->getEncodings()); + $this->assertSame(['123'], $request->getLanguages()); + } + public function testGetRequestFormat() { $request = new Request();