Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit ba1b05e

Browse files
committed
Merge branch '4.4' into 5.0
* 4.4: [DependencyInjection][Config] Use several placeholder unique prefixes for dynamic placeholder values [Mime] Keep Sender full address when used by non-SMTP transports Update MimeTypes.php
2 parents afd9760 + b34abaf commit ba1b05e

File tree

6 files changed

+88
-24
lines changed

6 files changed

+88
-24
lines changed

src/Symfony/Component/Config/Definition/BaseNode.php

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ abstract class BaseNode implements NodeInterface
2626
{
2727
const DEFAULT_PATH_SEPARATOR = '.';
2828

29-
private static $placeholderUniquePrefix;
29+
private static $placeholderUniquePrefixes = [];
3030
private static $placeholders = [];
3131

3232
protected $name;
@@ -74,7 +74,7 @@ public static function setPlaceholder(string $placeholder, array $values): void
7474
}
7575

7676
/**
77-
* Sets a common prefix for dynamic placeholder values.
77+
* Adds a common prefix for dynamic placeholder values.
7878
*
7979
* Matching configuration values will be skipped from being processed and are returned as is, thus preserving the
8080
* placeholder. An exact match provided by {@see setPlaceholder()} might take precedence.
@@ -83,7 +83,7 @@ public static function setPlaceholder(string $placeholder, array $values): void
8383
*/
8484
public static function setPlaceholderUniquePrefix(string $prefix): void
8585
{
86-
self::$placeholderUniquePrefix = $prefix;
86+
self::$placeholderUniquePrefixes[] = $prefix;
8787
}
8888

8989
/**
@@ -93,7 +93,7 @@ public static function setPlaceholderUniquePrefix(string $prefix): void
9393
*/
9494
public static function resetPlaceholders(): void
9595
{
96-
self::$placeholderUniquePrefix = null;
96+
self::$placeholderUniquePrefixes = [];
9797
self::$placeholders = [];
9898
}
9999

@@ -497,8 +497,10 @@ private static function resolvePlaceholderValue($value)
497497
return self::$placeholders[$value];
498498
}
499499

500-
if (self::$placeholderUniquePrefix && 0 === strpos($value, self::$placeholderUniquePrefix)) {
501-
return [];
500+
foreach (self::$placeholderUniquePrefixes as $placeholderUniquePrefix) {
501+
if (0 === strpos($value, $placeholderUniquePrefix)) {
502+
return [];
503+
}
502504
}
503505
}
504506

src/Symfony/Component/DependencyInjection/Compiler/MergeExtensionConfigurationPass.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,11 +79,11 @@ public function process(ContainerBuilder $container)
7979
$container->getParameterBag()->mergeEnvPlaceholders($resolvingBag);
8080
}
8181

82-
throw $e;
83-
} finally {
8482
if ($configAvailable) {
8583
BaseNode::resetPlaceholders();
8684
}
85+
86+
throw $e;
8787
}
8888

8989
if ($resolvingBag instanceof MergeExtensionConfigurationParameterBag) {
@@ -95,6 +95,10 @@ public function process(ContainerBuilder $container)
9595
$container->getParameterBag()->add($parameters);
9696
}
9797

98+
if ($configAvailable) {
99+
BaseNode::resetPlaceholders();
100+
}
101+
98102
$container->addDefinitions($definitions);
99103
$container->addAliases($aliases);
100104
}

src/Symfony/Component/DependencyInjection/Tests/Compiler/MergeExtensionConfigurationPassTest.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
namespace Symfony\Component\DependencyInjection\Tests\Compiler;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Component\Config\Definition\BaseNode;
1516
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
1617
use Symfony\Component\Config\Definition\ConfigurationInterface;
1718
use Symfony\Component\Config\Resource\FileResource;
@@ -128,6 +129,23 @@ public function testThrowingExtensionsGetMergedBag()
128129

129130
$this->assertSame(['FOO'], array_keys($container->getParameterBag()->getEnvPlaceholders()));
130131
}
132+
133+
public function testReuseEnvPlaceholderGeneratedByPreviousExtension()
134+
{
135+
if (!property_exists(BaseNode::class, 'placeholderUniquePrefixes')) {
136+
$this->markTestSkipped('This test requires symfony/config ^4.4.11|^5.0.11|^5.1.3');
137+
}
138+
139+
$container = new ContainerBuilder();
140+
$container->registerExtension(new FooExtension());
141+
$container->registerExtension(new TestCccExtension());
142+
$container->prependExtensionConfig('foo', ['bool_node' => '%env(bool:MY_ENV_VAR)%']);
143+
$container->prependExtensionConfig('test_ccc', ['bool_node' => '%env(bool:MY_ENV_VAR)%']);
144+
145+
(new MergeExtensionConfigurationPass())->process($container);
146+
147+
$this->addToAssertionCount(1);
148+
}
131149
}
132150

133151
class FooConfiguration implements ConfigurationInterface
@@ -139,6 +157,7 @@ public function getConfigTreeBuilder(): TreeBuilder
139157
->children()
140158
->scalarNode('bar')->end()
141159
->scalarNode('baz')->end()
160+
->booleanNode('bool_node')->end()
142161
->end();
143162

144163
return $treeBuilder;
@@ -166,6 +185,8 @@ public function load(array $configs, ContainerBuilder $container)
166185
$container->getParameterBag()->get('env(BOZ)');
167186
$container->resolveEnvPlaceholders($config['baz']);
168187
}
188+
189+
$container->setParameter('foo.param', 'ccc');
169190
}
170191
}
171192

@@ -194,3 +215,36 @@ public function load(array $configs, ContainerBuilder $container)
194215
throw new \Exception();
195216
}
196217
}
218+
219+
final class TestCccConfiguration implements ConfigurationInterface
220+
{
221+
public function getConfigTreeBuilder(): TreeBuilder
222+
{
223+
$treeBuilder = new TreeBuilder('test_ccc');
224+
$treeBuilder->getRootNode()
225+
->children()
226+
->booleanNode('bool_node')->end()
227+
->end();
228+
229+
return $treeBuilder;
230+
}
231+
}
232+
233+
final class TestCccExtension extends Extension
234+
{
235+
public function getAlias(): string
236+
{
237+
return 'test_ccc';
238+
}
239+
240+
public function getConfiguration(array $config, ContainerBuilder $container): ?ConfigurationInterface
241+
{
242+
return new TestCccConfiguration();
243+
}
244+
245+
public function load(array $configs, ContainerBuilder $container)
246+
{
247+
$configuration = $this->getConfiguration($configs, $container);
248+
$this->processConfiguration($configuration, $configs);
249+
}
250+
}

src/Symfony/Component/Mailer/Envelope.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,13 @@ public static function create(RawMessage $message): self
4444

4545
public function setSender(Address $sender): void
4646
{
47-
$this->sender = new Address($sender->getAddress());
47+
$this->sender = $sender;
4848
}
4949

50+
/**
51+
* @return Address Returns a "mailbox" as specified by RFC 2822
52+
* Must be converted to an "addr-spec" when used as a "MAIL FROM" value in SMTP (use getAddress())
53+
*/
5054
public function getSender(): Address
5155
{
5256
return $this->sender;

src/Symfony/Component/Mailer/Tests/EnvelopeTest.php

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public function testConstructorWithAddressSender()
2929

3030
public function testConstructorWithNamedAddressSender()
3131
{
32-
$e = new Envelope(new Address('[email protected]', 'Fabien'), [new Address('[email protected]')]);
33-
$this->assertEquals(new Address('[email protected]'), $e->getSender());
32+
$e = new Envelope($sender = new Address('[email protected]', 'Fabien'), [new Address('[email protected]')]);
33+
$this->assertEquals($sender, $e->getSender());
3434
}
3535

3636
public function testConstructorWithAddressRecipients()
@@ -54,31 +54,31 @@ public function testConstructorWithWrongRecipients()
5454
public function testSenderFromHeaders()
5555
{
5656
$headers = new Headers();
57-
$headers->addPathHeader('Return-Path', new Address('[email protected]', 'return'));
58-
$headers->addMailboxListHeader('To', ['from@symfony.com']);
57+
$headers->addPathHeader('Return-Path', $return = new Address('[email protected]', 'return'));
58+
$headers->addMailboxListHeader('To', ['to@symfony.com']);
5959
$e = Envelope::create(new Message($headers));
60-
$this->assertEquals(new Address('return@symfony.com', 'return'), $e->getSender());
60+
$this->assertEquals($return, $e->getSender());
6161

6262
$headers = new Headers();
63-
$headers->addMailboxHeader('Sender', new Address('[email protected]', 'sender'));
64-
$headers->addMailboxListHeader('To', ['from@symfony.com']);
63+
$headers->addMailboxHeader('Sender', $sender = new Address('[email protected]', 'sender'));
64+
$headers->addMailboxListHeader('To', ['to@symfony.com']);
6565
$e = Envelope::create(new Message($headers));
66-
$this->assertEquals(new Address('sender@symfony.com', 'sender'), $e->getSender());
66+
$this->assertEquals($sender, $e->getSender());
6767

6868
$headers = new Headers();
69-
$headers->addMailboxListHeader('From', [new Address('[email protected]', 'from'), '[email protected]']);
70-
$headers->addMailboxListHeader('To', ['from@symfony.com']);
69+
$headers->addMailboxListHeader('From', [$from = new Address('[email protected]', 'from'), '[email protected]']);
70+
$headers->addMailboxListHeader('To', ['to@symfony.com']);
7171
$e = Envelope::create(new Message($headers));
72-
$this->assertEquals(new Address('from@symfony.com', 'from'), $e->getSender());
72+
$this->assertEquals($from, $e->getSender());
7373
}
7474

7575
public function testSenderFromHeadersWithoutFrom()
7676
{
7777
$headers = new Headers();
78-
$headers->addMailboxListHeader('To', ['from@symfony.com']);
78+
$headers->addMailboxListHeader('To', ['to@symfony.com']);
7979
$e = Envelope::create($message = new Message($headers));
80-
$message->getHeaders()->addMailboxListHeader('From', [new Address('[email protected]', 'from')]);
81-
$this->assertEquals(new Address('from@symfony.com', 'from'), $e->getSender());
80+
$message->getHeaders()->addMailboxListHeader('From', [$from = new Address('[email protected]', 'from')]);
81+
$this->assertEquals($from, $e->getSender());
8282
}
8383

8484
public function testRecipientsFromHeaders()

src/Symfony/Component/Mime/MimeTypes.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ public function guessMimeType(string $path): ?string
137137
}
138138

139139
if (!$this->isGuesserSupported()) {
140-
throw new LogicException('Unable to guess the MIME type as no guessers are available (have you enable the php_fileinfo extension?).');
140+
throw new LogicException('Unable to guess the MIME type as no guessers are available (have you enabled the php_fileinfo extension?).');
141141
}
142142

143143
return null;

0 commit comments

Comments
 (0)