Skip to content

Commit 91497dc

Browse files
Merge branch '7.1' into 7.2
* 7.1: [HttpClient] Fix processing a NativeResponse after its client has been reset [Security] Throw an explicit error when authenticating a token with a null user translation to hebrew
2 parents 59874ce + 0920bb5 commit 91497dc

File tree

6 files changed

+81
-16
lines changed

6 files changed

+81
-16
lines changed

โ€Žsrc/Symfony/Component/HttpClient/Response/NativeResponse.phpโ€Ž

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public function __construct(
8080
};
8181

8282
$this->canary = new Canary(static function () use ($multi, $id) {
83-
if (null !== ($host = $multi->openHandles[$id][6] ?? null) && 0 >= --$multi->hosts[$host]) {
83+
if (null !== ($host = $multi->openHandles[$id][6] ?? null) && isset($multi->hosts[$host]) && 0 >= --$multi->hosts[$host]) {
8484
unset($multi->hosts[$host]);
8585
}
8686
unset($multi->openHandles[$id], $multi->handlesActivity[$id]);
@@ -303,7 +303,7 @@ private static function perform(ClientState $multi, ?array &$responses = null):
303303

304304
$multi->handlesActivity[$i][] = null;
305305
$multi->handlesActivity[$i][] = $e;
306-
if (null !== ($host = $multi->openHandles[$i][6] ?? null) && 0 >= --$multi->hosts[$host]) {
306+
if (null !== ($host = $multi->openHandles[$i][6] ?? null) && isset($multi->hosts[$host]) && 0 >= --$multi->hosts[$host]) {
307307
unset($multi->hosts[$host]);
308308
}
309309
unset($multi->openHandles[$i]);

โ€Žsrc/Symfony/Component/HttpClient/Tests/HttpClientTestCase.phpโ€Ž

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -701,6 +701,19 @@ public function testPostToGetRedirect(int $status)
701701
$this->assertSame('/', $body['REQUEST_URI']);
702702
}
703703

704+
public function testResponseCanBeProcessedAfterClientReset()
705+
{
706+
$client = $this->getHttpClient(__FUNCTION__);
707+
$response = $client->request('GET', 'http://127.0.0.1:8057/timeout-body');
708+
$stream = $client->stream($response);
709+
710+
$response->getStatusCode();
711+
$client->reset();
712+
$stream->current();
713+
714+
$this->addToAssertionCount(1);
715+
}
716+
704717
public function testUnixSocket()
705718
{
706719
if (!file_exists('/var/run/docker.sock')) {

โ€Žsrc/Symfony/Component/Security/Http/Firewall/ContextListener.phpโ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ public function authenticate(RequestEvent $event): void
121121
]);
122122

123123
if ($token instanceof TokenInterface) {
124+
if (!$token->getUser()) {
125+
throw new \UnexpectedValueException(\sprintf('Cannot authenticate a "%s" token because it doesn\'t store a user.', $token::class));
126+
}
127+
124128
$originalToken = $token;
125129
$token = $this->refreshUser($token);
126130

โ€Žsrc/Symfony/Component/Security/Http/Tests/Firewall/ContextListenerTest.phpโ€Ž

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
use Symfony\Component\Security\Core\User\UserInterface;
3737
use Symfony\Component\Security\Core\User\UserProviderInterface;
3838
use Symfony\Component\Security\Http\Firewall\ContextListener;
39+
use Symfony\Component\Security\Http\Tests\Fixtures\NullUserToken;
3940
use Symfony\Contracts\Service\ServiceLocatorTrait;
4041

4142
class ContextListenerTest extends TestCase
@@ -58,6 +59,30 @@ public function testUserProvidersNeedToImplementAnInterface()
5859
$this->handleEventWithPreviousSession([new \stdClass()]);
5960
}
6061

62+
public function testTokenReturnsNullUser()
63+
{
64+
$tokenStorage = new TokenStorage();
65+
$tokenStorage->setToken(new NullUserToken());
66+
67+
$session = new Session(new MockArraySessionStorage());
68+
$session->set('_security_context_key', serialize($tokenStorage->getToken()));
69+
70+
$request = new Request();
71+
$request->setSession($session);
72+
$request->cookies->set('MOCKSESSID', true);
73+
74+
$listener = new ContextListener($tokenStorage, [], 'context_key');
75+
76+
$this->expectException(\UnexpectedValueException::class);
77+
$this->expectExceptionMessage('Cannot authenticate a "Symfony\Component\Security\Http\Tests\Fixtures\NullUserToken" token because it doesn\'t store a user.');
78+
79+
$listener->authenticate(new RequestEvent(
80+
$this->createMock(HttpKernelInterface::class),
81+
$request,
82+
HttpKernelInterface::MAIN_REQUEST,
83+
));
84+
}
85+
6186
public function testOnKernelResponseWillAddSession()
6287
{
6388
$session = $this->runSessionOnKernelResponse(
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the Symfony package.
5+
*
6+
* (c) Fabien Potencier <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
namespace Symfony\Component\Security\Http\Tests\Fixtures;
13+
14+
use Symfony\Component\Security\Core\Authentication\Token\AbstractToken;
15+
use Symfony\Component\Security\Core\User\UserInterface;
16+
17+
class NullUserToken extends AbstractToken
18+
{
19+
public function getUser(): ?UserInterface
20+
{
21+
return null;
22+
}
23+
}

โ€Žsrc/Symfony/Component/Validator/Resources/translations/validators.he.xlfโ€Ž

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@
136136
</trans-unit>
137137
<trans-unit id="37" resname="This is not a valid IP address.">
138138
<source>This value is not a valid IP address.</source>
139-
<target state="needs-review-translation">ืขืจืš ื–ื” ืื™ื ื• ื›ืชื•ื‘ืช IP ืชืงืคื”.</target>
139+
<target>ืขืจืš ื–ื” ืื™ื ื• ื›ืชื•ื‘ืช IP ืชืงืคื”.</target>
140140
</trans-unit>
141141
<trans-unit id="38">
142142
<source>This value is not a valid language.</source>
@@ -192,7 +192,7 @@
192192
</trans-unit>
193193
<trans-unit id="51" resname="No temporary folder was configured in php.ini.">
194194
<source>No temporary folder was configured in php.ini, or the configured folder does not exist.</source>
195-
<target state="needs-review-translation">ืœื ื”ื•ื’ื“ืจื” ืชื™ืงื™ื™ื” ื–ืžื ื™ืช ื‘-php.ini, ืื• ืฉื”ืชื™ืงื™ื™ื” ื”ืžื•ื’ื“ืจืช ืื™ื ื” ืงื™ื™ืžืช.</target>
195+
<target>ืœื ื”ื•ื’ื“ืจื” ืชื™ืงื™ื™ื” ื–ืžื ื™ืช ื‘-php.ini, ืื• ืฉื”ืชื™ืงื™ื™ื” ื”ืžื•ื’ื“ืจืช ืื™ื ื” ืงื™ื™ืžืช.</target>
196196
</trans-unit>
197197
<trans-unit id="52">
198198
<source>Cannot write temporary file to disk.</source>
@@ -224,7 +224,7 @@
224224
</trans-unit>
225225
<trans-unit id="59" resname="This is not a valid International Bank Account Number (IBAN).">
226226
<source>This value is not a valid International Bank Account Number (IBAN).</source>
227-
<target state="needs-review-translation">ืขืจืš ื–ื” ืื™ื ื• ืžืกืคืจ ื—ืฉื‘ื•ืŸ ื‘ื ืง ื‘ื™ื ืœืื•ืžื™ (IBAN) ืชืงืฃ.</target>
227+
<target>ืขืจืš ื–ื” ืื™ื ื• ืžืกืคืจ ื–ื”"ื‘ (IBAN) ืชืงืฃ.</target>
228228
</trans-unit>
229229
<trans-unit id="60">
230230
<source>This value is not a valid ISBN-10.</source>
@@ -312,15 +312,15 @@
312312
</trans-unit>
313313
<trans-unit id="81" resname="This is not a valid Business Identifier Code (BIC).">
314314
<source>This value is not a valid Business Identifier Code (BIC).</source>
315-
<target state="needs-review-translation">ืขืจืš ื–ื” ืื™ื ื• ืงื•ื“ ืžื–ื”ื” ืขืกืงื™ (BIC) ืชืงืฃ.</target>
315+
<target>ืขืจืš ื–ื” ืื™ื ื• ืงื•ื“ ืžื–ื”ื” ืขืกืงื™ (BIC) ืชืงืฃ.</target>
316316
</trans-unit>
317317
<trans-unit id="82">
318318
<source>Error</source>
319319
<target>ืฉื’ื™ืื”</target>
320320
</trans-unit>
321321
<trans-unit id="83" resname="This is not a valid UUID.">
322322
<source>This value is not a valid UUID.</source>
323-
<target state="needs-review-translation">ืขืจืš ื–ื” ืื™ื ื• UUID ืชืงืฃ.</target>
323+
<target>ืขืจืš ื–ื” ืื™ื ื• UUID ืชืงืฃ.</target>
324324
</trans-unit>
325325
<trans-unit id="84">
326326
<source>This value should be a multiple of {{ compared_value }}.</source>
@@ -404,39 +404,39 @@
404404
</trans-unit>
405405
<trans-unit id="104">
406406
<source>The filename is too long. It should have {{ filename_max_length }} character or less.|The filename is too long. It should have {{ filename_max_length }} characters or less.</source>
407-
<target state="needs-review-translation">ืฉื ื”ืงื•ื‘ืฅ ืืจื•ืš ืžื“ื™. ืขืœื™ื• ืœื”ื›ื™ืœ {{ filename_max_length }} ืชื•ื•ื™ื ืื• ืคื—ื•ืช.</target>
407+
<target>ืฉื ื”ืงื•ื‘ืฅ ืืจื•ืš ืžื“ื™. ืขืœื™ื• ืœื”ื›ื™ืœ {{ filename_max_length }} ืชื•ื•ื™ื ืื• ืคื—ื•ืช.</target>
408408
</trans-unit>
409409
<trans-unit id="105">
410410
<source>The password strength is too low. Please use a stronger password.</source>
411-
<target state="needs-review-translation">ื—ื•ื–ืง ื”ืกื™ืกืžื” ื ืžื•ืš ืžื“ื™. ืื ื ื”ืฉืชืžืฉ ื‘ืกื™ืกืžื” ื—ื–ืงื” ื™ื•ืชืจ.</target>
411+
<target>ื—ื•ื–ืง ื”ืกื™ืกืžื” ื ืžื•ืš ืžื“ื™. ืื ื ื”ืฉืชืžืฉ ื‘ืกื™ืกืžื” ื—ื–ืงื” ื™ื•ืชืจ.</target>
412412
</trans-unit>
413413
<trans-unit id="106">
414414
<source>This value contains characters that are not allowed by the current restriction-level.</source>
415-
<target state="needs-review-translation">ื”ืขืจืš ื›ื•ืœืœ ืชื•ื•ื™ื ืฉืื™ื ื ืžื•ืชืจื™ื ืขืœ ืคื™ ืจืžืช ื”ื”ื’ื‘ืœื” ื”ื ื•ื›ื—ื™ืช.</target>
415+
<target>ื”ืขืจืš ื›ื•ืœืœ ืชื•ื•ื™ื ืฉืื™ื ื ืžื•ืชืจื™ื ืขืœ ืคื™ ืจืžืช ื”ื”ื’ื‘ืœื” ื”ื ื•ื›ื—ื™ืช.</target>
416416
</trans-unit>
417417
<trans-unit id="107">
418418
<source>Using invisible characters is not allowed.</source>
419-
<target state="needs-review-translation">ืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ืชื•ื•ื™ื ื‘ืœืชื™ ื ืจืื™ื.</target>
419+
<target>ืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ืชื•ื•ื™ื ื‘ืœืชื™ ื ืจืื™ื.</target>
420420
</trans-unit>
421421
<trans-unit id="108">
422422
<source>Mixing numbers from different scripts is not allowed.</source>
423-
<target state="needs-review-translation">ืืกื•ืจ ืœืขืจื‘ื‘ ืžืกืคืจื™ื ืžืชืกืจื™ื˜ื™ื ืฉื•ื ื™ื.</target>
423+
<target>ืืกื•ืจ ืœืขืจื‘ื‘ ืžืกืคืจื™ื ืžืกืงืจื™ืคื˜ื™ื ืฉื•ื ื™ื.</target>
424424
</trans-unit>
425425
<trans-unit id="109">
426426
<source>Using hidden overlay characters is not allowed.</source>
427-
<target state="needs-review-translation">ืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ืชื•ื•ื™ื ืžื•ืกืชืจื™ื ืฉืœ ื—ืคื™ืคื”.</target>
427+
<target>ืืกื•ืจ ืœื”ืฉืชืžืฉ ื‘ืชื•ื•ื™ื ื—ื•ืคืคื™ื ื ืกืชืจื™ื.</target>
428428
</trans-unit>
429429
<trans-unit id="110">
430430
<source>The extension of the file is invalid ({{ extension }}). Allowed extensions are {{ extensions }}.</source>
431-
<target state="needs-review-translation">ืกื™ื•ืžืช ื”ืงื•ื‘ืฅ ืื™ื ื” ืชืงื™ื ื” ({{ extension }}). ื”ืกื™ื•ืžื•ืช ื”ืžื•ืชืจื•ืช ื”ืŸ {{ extensions }}.</target>
431+
<target>ืกื™ื•ืžืช ื”ืงื•ื‘ืฅ ืื™ื ื” ืชืงื™ื ื” ({{ extension }}). ื”ืกื™ื•ืžื•ืช ื”ืžื•ืชืจื•ืช ื”ืŸ {{ extensions }}.</target>
432432
</trans-unit>
433433
<trans-unit id="111">
434434
<source>The detected character encoding is invalid ({{ detected }}). Allowed encodings are {{ encodings }}.</source>
435-
<target state="needs-review-translation">ืงื™ื“ื•ื“ ื”ืชื•ื•ื™ื ืฉื–ื•ื”ื” ืื™ื ื• ื—ื•ืงื™ ({{ detected }}). ื”ืงื™ื“ื•ื“ื™ื ื”ืžื•ืชืจื™ื ื”ื {{ encodings }}.</target>
435+
<target>ืงื™ื“ื•ื“ ื”ืชื•ื•ื™ื ืฉื–ื•ื”ื” ืื™ื ื• ื—ื•ืงื™ ({{ detected }}). ื”ืงื™ื“ื•ื“ื™ื ื”ืžื•ืชืจื™ื ื”ื {{ encodings }}.</target>
436436
</trans-unit>
437437
<trans-unit id="112">
438438
<source>This value is not a valid MAC address.</source>
439-
<target state="needs-review-translation">ืขืจืš ื–ื” ืื™ื ื• ื›ืชื•ื‘ืช MAC ืชืงืคื”.</target>
439+
<target>ืขืจืš ื–ื” ืื™ื ื• ื›ืชื•ื‘ืช MAC ืชืงืคื”.</target>
440440
</trans-unit>
441441
<trans-unit id="113">
442442
<source>This URL is missing a top-level domain.</source>

0 commit comments

Comments
ย (0)