From 70b448d120f53609e8be3542b354193196cda1ce Mon Sep 17 00:00:00 2001 From: Ryan Weaver Date: Sun, 7 Apr 2019 03:44:13 -0400 Subject: [PATCH] Reorganizing messenger serializer config and replacing base64_encode with addslashes --- .../DependencyInjection/Configuration.php | 29 +++++++++++-------- .../FrameworkExtension.php | 6 ++-- .../Resources/config/schema/symfony-1.0.xsd | 12 +++++--- .../DependencyInjection/ConfigurationTest.php | 10 ++++--- .../Fixtures/php/messenger.php | 1 - .../Fixtures/php/messenger_routing.php | 4 ++- .../Fixtures/php/messenger_transport.php | 10 ++++--- .../Fixtures/php/messenger_transports.php | 4 ++- .../Fixtures/xml/messenger_routing.xml | 2 +- .../Fixtures/xml/messenger_transport.xml | 13 +++++---- .../Fixtures/xml/messenger_transports.xml | 2 +- .../Fixtures/yml/messenger.yml | 1 - .../Fixtures/yml/messenger_routing.yml | 3 +- .../Fixtures/yml/messenger_transport.yml | 11 +++---- .../Fixtures/yml/messenger_transports.yml | 3 +- .../Serialization/PhpSerializerTest.php | 6 ++-- .../Transport/Serialization/PhpSerializer.php | 10 +++---- 17 files changed, 73 insertions(+), 54 deletions(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php index 00d0053dc4cbd..d8b98a6319fb3 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php @@ -1143,20 +1143,25 @@ function ($a) { ->end() ->end() ->end() - ->scalarNode('default_serializer') - ->defaultValue('messenger.transport.native_php_serializer') - ->info('Service id to use as the default serializer for the transports.') - ->end() - ->arrayNode('symfony_serializer') + ->arrayNode('serializer') ->addDefaultsIfNotSet() ->children() - ->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end() - ->arrayNode('context') - ->normalizeKeys(false) - ->useAttributeAsKey('name') - ->defaultValue([]) - ->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).') - ->prototype('variable')->end() + ->scalarNode('default_serializer') + ->defaultValue('messenger.transport.native_php_serializer') + ->info('Service id to use as the default serializer for the transports.') + ->end() + ->arrayNode('symfony_serializer') + ->addDefaultsIfNotSet() + ->children() + ->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end() + ->arrayNode('context') + ->normalizeKeys(false) + ->useAttributeAsKey('name') + ->defaultValue([]) + ->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).') + ->prototype('variable')->end() + ->end() + ->end() ->end() ->end() ->end() diff --git a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php index b6ffff5f07ead..c085f57e6686f 100644 --- a/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php +++ b/src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php @@ -1692,9 +1692,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder $container->removeDefinition('messenger.transport.amqp.factory'); } else { $container->getDefinition('messenger.transport.symfony_serializer') - ->replaceArgument(1, $config['symfony_serializer']['format']) - ->replaceArgument(2, $config['symfony_serializer']['context']); - $container->setAlias('messenger.default_serializer', $config['default_serializer']); + ->replaceArgument(1, $config['serializer']['symfony_serializer']['format']) + ->replaceArgument(2, $config['serializer']['symfony_serializer']['context']); + $container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']); } $senderAliases = []; diff --git a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd index 478a5059820a5..fcba6ef6ce362 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd +++ b/src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd @@ -407,10 +407,7 @@ - - - - + @@ -418,6 +415,13 @@ + + + + + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php index 827988669fb8d..bd3ba1c18d8c0 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php @@ -328,10 +328,12 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor 'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class), 'routing' => [], 'transports' => [], - 'default_serializer' => 'messenger.transport.native_php_serializer', - 'symfony_serializer' => [ - 'format' => 'json', - 'context' => [], + 'serializer' => [ + 'default_serializer' => 'messenger.transport.native_php_serializer', + 'symfony_serializer' => [ + 'format' => 'json', + 'context' => [], + ], ], 'default_bus' => null, 'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]], diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php index c74b64f3ffb1d..1160dfc573a7c 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php @@ -5,7 +5,6 @@ $container->loadFromExtension('framework', [ 'messenger' => [ - 'default_serializer' => false, 'routing' => [ FooMessage::class => ['sender.bar', 'sender.biz'], BarMessage::class => 'sender.foo', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php index 6e0b7c61f1297..c8bddb1e8fcec 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php @@ -3,7 +3,9 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'default_serializer' => 'messenger.transport.symfony_serializer', + 'serializer' => [ + 'default_serializer' => 'messenger.transport.symfony_serializer', + ], 'routing' => [ 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'], 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php index 6a1c729fd460b..7baab29dc57ce 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php @@ -3,10 +3,12 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'default_serializer' => 'messenger.transport.symfony_serializer', - 'symfony_serializer' => [ - 'format' => 'csv', - 'context' => ['enable_max_depth' => true], + 'serializer' => [ + 'default_serializer' => 'messenger.transport.symfony_serializer', + 'symfony_serializer' => [ + 'format' => 'csv', + 'context' => ['enable_max_depth' => true], + ], ], 'transports' => [ 'default' => 'amqp://localhost/%2f/messages', diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php index a326c505e62b2..b655644e0dff5 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php @@ -3,7 +3,9 @@ $container->loadFromExtension('framework', [ 'serializer' => true, 'messenger' => [ - 'default_serializer' => 'messenger.transport.symfony_serializer', + 'serializer' => [ + 'default_serializer' => 'messenger.transport.symfony_serializer', + ], 'transports' => [ 'default' => 'amqp://localhost/%2f/messages', 'customised' => [ diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml index 6231a7a82e98a..2b895cb6e6b86 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml @@ -8,7 +8,7 @@ - messenger.transport.symfony_serializer + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml index 82a85aedcc849..e5e60a39823a6 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml @@ -8,12 +8,13 @@ - messenger.transport.symfony_serializer - - - true - - + + + + true + + + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml index 70cdb69a8ada4..411c0c29e5b50 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml @@ -8,7 +8,7 @@ - messenger.transport.symfony_serializer + diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml index 42df49ea4d1cb..7f038af11fdff 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger.yml @@ -1,6 +1,5 @@ framework: messenger: - default_serializer: false routing: 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz'] 'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml index 4481a16d46033..84b6e2c0047ed 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml @@ -1,7 +1,8 @@ framework: serializer: true messenger: - default_serializer: messenger.transport.symfony_serializer + serializer: + default_serializer: messenger.transport.symfony_serializer routing: 'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit] 'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage': diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml index 8740f37bd6ec1..b51feb73bce95 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transport.yml @@ -1,10 +1,11 @@ framework: serializer: true messenger: - default_serializer: messenger.transport.symfony_serializer - symfony_serializer: - format: csv - context: - enable_max_depth: true + serializer: + default_serializer: messenger.transport.symfony_serializer + symfony_serializer: + format: csv + context: + enable_max_depth: true transports: default: 'amqp://localhost/%2f/messages' diff --git a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml index 48ff8c6c82364..409e410986840 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml +++ b/src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml @@ -1,7 +1,8 @@ framework: serializer: true messenger: - default_serializer: messenger.transport.symfony_serializer + serializer: + default_serializer: messenger.transport.symfony_serializer transports: default: 'amqp://localhost/%2f/messages' customised: diff --git a/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php b/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php index 53905a053d1a5..6e508365e500a 100644 --- a/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php +++ b/src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php @@ -25,7 +25,9 @@ public function testEncodedIsDecodable() $envelope = new Envelope(new DummyMessage('Hello')); - $this->assertEquals($envelope, $serializer->decode($serializer->encode($envelope))); + $encoded = $serializer->encode($envelope); + $this->assertNotContains("\0", $encoded['body'], 'Does not contain the binary characters'); + $this->assertEquals($envelope, $serializer->decode($encoded)); } public function testDecodingFailsWithMissingBodyKey() @@ -58,7 +60,7 @@ public function testDecodingFailsWithBadClass() $serializer = new PhpSerializer(); $serializer->decode([ - 'body' => base64_encode('O:13:"ReceivedSt0mp":0:{}'), + 'body' => 'O:13:"ReceivedSt0mp":0:{}', ]); } } diff --git a/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php index 6a27529c5592d..a916bf795c21d 100644 --- a/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php +++ b/src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php @@ -30,11 +30,7 @@ public function decode(array $encodedEnvelope): Envelope throw new MessageDecodingFailedException('Encoded envelope should have at least a "body".'); } - $serializeEnvelope = base64_decode($encodedEnvelope['body']); - - if (false === $serializeEnvelope) { - throw new MessageDecodingFailedException('The "body" key could not be base64 decoded.'); - } + $serializeEnvelope = stripslashes($encodedEnvelope['body']); return $this->safelyUnserialize($serializeEnvelope); } @@ -44,8 +40,10 @@ public function decode(array $encodedEnvelope): Envelope */ public function encode(Envelope $envelope): array { + $body = addslashes(serialize($envelope)); + return [ - 'body' => base64_encode(serialize($envelope)), + 'body' => $body, ]; }