Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit e683dfa

Browse filesBrowse files
committed
feature #30957 [Messenger] Remove base64_encode & use addslashes (weaverryan)
This PR was merged into the 4.3-dev branch. Discussion ---------- [Messenger] Remove base64_encode & use addslashes | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | none | License | MIT | Doc PR | already covered by existing issue In #30814, we base64_encoded messages because some transports (specifically DoctrineTransport + Postgresql & SQS) do not allow binary data. The downside is that the messages become unreadable, which makes it much less convenient to debug your messages with 3rd party monitoring tools, for example. This PR replaces base64_encode with addslashes. Another alternative (that I first tried in this PR) was to use a blob type, which Drupal does in its code (https://www.drupal.org/project/drupal/issues/690746). But, it still meant that binary data could cause problems with other transports, like SQS. I also put all the serializer config under a nice, neat `serializer` key under messenger. Best seen with `?w=1`. Cheers! Commits ------- 70b448d Reorganizing messenger serializer config and replacing base64_encode with addslashes
2 parents 9aedfeb + 70b448d commit e683dfa
Copy full SHA for e683dfa

File tree

17 files changed

+73
-54
lines changed
Filter options

17 files changed

+73
-54
lines changed

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/Configuration.php
+17-12Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1143,20 +1143,25 @@ function ($a) {
11431143
->end()
11441144
->end()
11451145
->end()
1146-
->scalarNode('default_serializer')
1147-
->defaultValue('messenger.transport.native_php_serializer')
1148-
->info('Service id to use as the default serializer for the transports.')
1149-
->end()
1150-
->arrayNode('symfony_serializer')
1146+
->arrayNode('serializer')
11511147
->addDefaultsIfNotSet()
11521148
->children()
1153-
->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
1154-
->arrayNode('context')
1155-
->normalizeKeys(false)
1156-
->useAttributeAsKey('name')
1157-
->defaultValue([])
1158-
->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
1159-
->prototype('variable')->end()
1149+
->scalarNode('default_serializer')
1150+
->defaultValue('messenger.transport.native_php_serializer')
1151+
->info('Service id to use as the default serializer for the transports.')
1152+
->end()
1153+
->arrayNode('symfony_serializer')
1154+
->addDefaultsIfNotSet()
1155+
->children()
1156+
->scalarNode('format')->defaultValue('json')->info('Serialization format for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')->end()
1157+
->arrayNode('context')
1158+
->normalizeKeys(false)
1159+
->useAttributeAsKey('name')
1160+
->defaultValue([])
1161+
->info('Context array for the messenger.transport.symfony_serializer service (which is not the serializer used by default).')
1162+
->prototype('variable')->end()
1163+
->end()
1164+
->end()
11601165
->end()
11611166
->end()
11621167
->end()

‎src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1692,9 +1692,9 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
16921692
$container->removeDefinition('messenger.transport.amqp.factory');
16931693
} else {
16941694
$container->getDefinition('messenger.transport.symfony_serializer')
1695-
->replaceArgument(1, $config['symfony_serializer']['format'])
1696-
->replaceArgument(2, $config['symfony_serializer']['context']);
1697-
$container->setAlias('messenger.default_serializer', $config['default_serializer']);
1695+
->replaceArgument(1, $config['serializer']['symfony_serializer']['format'])
1696+
->replaceArgument(2, $config['serializer']['symfony_serializer']['context']);
1697+
$container->setAlias('messenger.default_serializer', $config['serializer']['default_serializer']);
16981698
}
16991699

17001700
$senderAliases = [];

‎src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Resources/config/schema/symfony-1.0.xsd
+8-4Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,17 +407,21 @@
407407

408408
<xsd:complexType name="messenger">
409409
<xsd:sequence>
410-
<xsd:element name="default-serializer" type="xsd:string" minOccurs="0" />
411-
<xsd:element name="symfony-serializer" type="messenger_symfony_serializer" minOccurs="0" />
412-
<xsd:element name="encoder" type="xsd:string" minOccurs="0" />
413-
<xsd:element name="decoder" type="xsd:string" minOccurs="0" />
410+
<xsd:element name="serializer" type="messenger_serializer" minOccurs="0" />
414411
<xsd:element name="routing" type="messenger_routing" minOccurs="0" maxOccurs="unbounded" />
415412
<xsd:element name="transport" type="messenger_transport" minOccurs="0" maxOccurs="unbounded" />
416413
<xsd:element name="bus" type="messenger_bus" minOccurs="0" maxOccurs="unbounded" />
417414
</xsd:sequence>
418415
<xsd:attribute name="default-bus" type="xsd:string" />
419416
</xsd:complexType>
420417

418+
<xsd:complexType name="messenger_serializer">
419+
<xsd:sequence>
420+
<xsd:element name="symfony-serializer" type="messenger_symfony_serializer" minOccurs="0" />
421+
</xsd:sequence>
422+
<xsd:attribute name="default-serializer" type="xsd:string" />
423+
</xsd:complexType>
424+
421425
<xsd:complexType name="messenger_symfony_serializer">
422426
<xsd:sequence>
423427
<xsd:element name="context" type="metadata" minOccurs="0" maxOccurs="unbounded" />

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/ConfigurationTest.php
+6-4Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,12 @@ class_exists(SemaphoreStore::class) && SemaphoreStore::isSupported() ? 'semaphor
328328
'enabled' => !class_exists(FullStack::class) && interface_exists(MessageBusInterface::class),
329329
'routing' => [],
330330
'transports' => [],
331-
'default_serializer' => 'messenger.transport.native_php_serializer',
332-
'symfony_serializer' => [
333-
'format' => 'json',
334-
'context' => [],
331+
'serializer' => [
332+
'default_serializer' => 'messenger.transport.native_php_serializer',
333+
'symfony_serializer' => [
334+
'format' => 'json',
335+
'context' => [],
336+
],
335337
],
336338
'default_bus' => null,
337339
'buses' => ['messenger.bus.default' => ['default_middleware' => true, 'middleware' => []]],

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger.php
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55

66
$container->loadFromExtension('framework', [
77
'messenger' => [
8-
'default_serializer' => false,
98
'routing' => [
109
FooMessage::class => ['sender.bar', 'sender.biz'],
1110
BarMessage::class => 'sender.foo',

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_routing.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
],
79
'routing' => [
810
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage' => ['amqp', 'audit'],
911
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage' => [

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transport.php
+6-4Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
7-
'symfony_serializer' => [
8-
'format' => 'csv',
9-
'context' => ['enable_max_depth' => true],
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
'symfony_serializer' => [
9+
'format' => 'csv',
10+
'context' => ['enable_max_depth' => true],
11+
],
1012
],
1113
'transports' => [
1214
'default' => 'amqp://localhost/%2f/messages',

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/php/messenger_transports.php
+3-1Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
$container->loadFromExtension('framework', [
44
'serializer' => true,
55
'messenger' => [
6-
'default_serializer' => 'messenger.transport.symfony_serializer',
6+
'serializer' => [
7+
'default_serializer' => 'messenger.transport.symfony_serializer',
8+
],
79
'transports' => [
810
'default' => 'amqp://localhost/%2f/messages',
911
'customised' => [

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_routing.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer" />
1212
<framework:routing message-class="Symfony\Component\Messenger\Tests\Fixtures\DummyMessage">
1313
<framework:sender service="amqp" />
1414
<framework:sender service="audit" />

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transport.xml
+7-6Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
12-
<framework:symfony-serializer format="csv">
13-
<framework:context>
14-
<framework:enable_max_depth>true</framework:enable_max_depth>
15-
</framework:context>
16-
</framework:symfony-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer">
12+
<framework:symfony-serializer format="csv">
13+
<framework:context>
14+
<framework:enable_max_depth>true</framework:enable_max_depth>
15+
</framework:context>
16+
</framework:symfony-serializer>
17+
</framework:serializer>
1718
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
1819
</framework:messenger>
1920
</framework:config>

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/xml/messenger_transports.xml
+1-1Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<framework:config>
99
<framework:serializer enabled="true" />
1010
<framework:messenger>
11-
<framework:default-serializer>messenger.transport.symfony_serializer</framework:default-serializer>
11+
<framework:serializer default-serializer="messenger.transport.symfony_serializer" />
1212
<framework:transport name="default" dsn="amqp://localhost/%2f/messages" />
1313
<framework:transport name="customised" dsn="amqp://localhost/%2f/messages?exchange_name=exchange_name" serializer="messenger.transport.native_php_serializer">
1414
<framework:options>
-1Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
framework:
22
messenger:
3-
default_serializer: false
43
routing:
54
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\FooMessage': ['sender.bar', 'sender.biz']
65
'Symfony\Bundle\FrameworkBundle\Tests\Fixtures\Messenger\BarMessage': 'sender.foo'

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_routing.yml
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
56
routing:
67
'Symfony\Component\Messenger\Tests\Fixtures\DummyMessage': [amqp, audit]
78
'Symfony\Component\Messenger\Tests\Fixtures\SecondMessage':
+6-5Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
5-
symfony_serializer:
6-
format: csv
7-
context:
8-
enable_max_depth: true
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
6+
symfony_serializer:
7+
format: csv
8+
context:
9+
enable_max_depth: true
910
transports:
1011
default: 'amqp://localhost/%2f/messages'

‎src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml

Copy file name to clipboardExpand all lines: src/Symfony/Bundle/FrameworkBundle/Tests/DependencyInjection/Fixtures/yml/messenger_transports.yml
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
framework:
22
serializer: true
33
messenger:
4-
default_serializer: messenger.transport.symfony_serializer
4+
serializer:
5+
default_serializer: messenger.transport.symfony_serializer
56
transports:
67
default: 'amqp://localhost/%2f/messages'
78
customised:

‎src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Tests/Transport/Serialization/PhpSerializerTest.php
+4-2Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@ public function testEncodedIsDecodable()
2525

2626
$envelope = new Envelope(new DummyMessage('Hello'));
2727

28-
$this->assertEquals($envelope, $serializer->decode($serializer->encode($envelope)));
28+
$encoded = $serializer->encode($envelope);
29+
$this->assertNotContains("\0", $encoded['body'], 'Does not contain the binary characters');
30+
$this->assertEquals($envelope, $serializer->decode($encoded));
2931
}
3032

3133
public function testDecodingFailsWithMissingBodyKey()
@@ -58,7 +60,7 @@ public function testDecodingFailsWithBadClass()
5860
$serializer = new PhpSerializer();
5961

6062
$serializer->decode([
61-
'body' => base64_encode('O:13:"ReceivedSt0mp":0:{}'),
63+
'body' => 'O:13:"ReceivedSt0mp":0:{}',
6264
]);
6365
}
6466
}

‎src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Messenger/Transport/Serialization/PhpSerializer.php
+4-6Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,7 @@ public function decode(array $encodedEnvelope): Envelope
3030
throw new MessageDecodingFailedException('Encoded envelope should have at least a "body".');
3131
}
3232

33-
$serializeEnvelope = base64_decode($encodedEnvelope['body']);
34-
35-
if (false === $serializeEnvelope) {
36-
throw new MessageDecodingFailedException('The "body" key could not be base64 decoded.');
37-
}
33+
$serializeEnvelope = stripslashes($encodedEnvelope['body']);
3834

3935
return $this->safelyUnserialize($serializeEnvelope);
4036
}
@@ -44,8 +40,10 @@ public function decode(array $encodedEnvelope): Envelope
4440
*/
4541
public function encode(Envelope $envelope): array
4642
{
43+
$body = addslashes(serialize($envelope));
44+
4745
return [
48-
'body' => base64_encode(serialize($envelope)),
46+
'body' => $body,
4947
];
5048
}
5149

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.