From 122f58c13baeaecfb3e08265b432e40fe9399c82 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 30 Jan 2024 08:55:07 +0100 Subject: [PATCH] [Mime] Fix serializing uninitialized RawMessage::$message to null --- .../Bridge/Twig/Tests/Mime/TemplatedEmailTest.php | 3 +-- src/Symfony/Bridge/Twig/composer.json | 2 +- src/Symfony/Component/Mime/RawMessage.php | 3 +++ src/Symfony/Component/Mime/Tests/EmailTest.php | 3 +-- src/Symfony/Component/Mime/Tests/MessageTest.php | 3 +-- src/Symfony/Component/Mime/composer.json | 4 ++-- .../Serializer/Normalizer/MimeMessageNormalizer.php | 10 +++++++--- 7 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php b/src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php index b21017193251d..dd23cd37320f2 100644 --- a/src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php +++ b/src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php @@ -94,8 +94,7 @@ public function testSymfonySerialize() } ] }, - "body": null, - "message": null + "body": null } EOF; diff --git a/src/Symfony/Bridge/Twig/composer.json b/src/Symfony/Bridge/Twig/composer.json index 07275fe457320..1abf3ad1df889 100644 --- a/src/Symfony/Bridge/Twig/composer.json +++ b/src/Symfony/Bridge/Twig/composer.json @@ -42,7 +42,7 @@ "symfony/security-core": "^4.4|^5.0|^6.0", "symfony/security-csrf": "^4.4|^5.0|^6.0", "symfony/security-http": "^4.4|^5.0|^6.0", - "symfony/serializer": "^5.2|^6.0", + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3", "symfony/stopwatch": "^4.4|^5.0|^6.0", "symfony/console": "^5.3|^6.0", "symfony/expression-language": "^4.4|^5.0|^6.0", diff --git a/src/Symfony/Component/Mime/RawMessage.php b/src/Symfony/Component/Mime/RawMessage.php index d2a311daebecf..ace19601eab3e 100644 --- a/src/Symfony/Component/Mime/RawMessage.php +++ b/src/Symfony/Component/Mime/RawMessage.php @@ -18,6 +18,9 @@ */ class RawMessage implements \Serializable { + /** + * @var iterable|string + */ private $message; /** diff --git a/src/Symfony/Component/Mime/Tests/EmailTest.php b/src/Symfony/Component/Mime/Tests/EmailTest.php index 058849f2ac4ca..a868ae77ff247 100644 --- a/src/Symfony/Component/Mime/Tests/EmailTest.php +++ b/src/Symfony/Component/Mime/Tests/EmailTest.php @@ -547,8 +547,7 @@ public function testSymfonySerialize() } ] }, - "body": null, - "message": null + "body": null } EOF; diff --git a/src/Symfony/Component/Mime/Tests/MessageTest.php b/src/Symfony/Component/Mime/Tests/MessageTest.php index c2c4c37bc3fb9..308eb8f7179db 100644 --- a/src/Symfony/Component/Mime/Tests/MessageTest.php +++ b/src/Symfony/Component/Mime/Tests/MessageTest.php @@ -254,8 +254,7 @@ public function testSymfonySerialize() ] }, "class": "Symfony\\\\Component\\\\Mime\\\\Part\\\\Multipart\\\\MixedPart" - }, - "message": null + } } EOF; diff --git a/src/Symfony/Component/Mime/composer.json b/src/Symfony/Component/Mime/composer.json index 195f041a4d1b8..11823efc347dd 100644 --- a/src/Symfony/Component/Mime/composer.json +++ b/src/Symfony/Component/Mime/composer.json @@ -28,14 +28,14 @@ "symfony/dependency-injection": "^4.4|^5.0|^6.0", "symfony/property-access": "^4.4|^5.1|^6.0", "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.4.26|~6.2.13|^6.3.2" + "symfony/serializer": "^5.4.35|~6.3.12|^6.4.3" }, "conflict": { "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<4.4", - "symfony/serializer": "<5.4.26|>=6,<6.2.13|>=6.3,<6.3.2" + "symfony/serializer": "<5.4.35|>=6,<6.3.12|>=6.4,<6.4.3" }, "autoload": { "psr-4": { "Symfony\\Component\\Mime\\": "" }, diff --git a/src/Symfony/Component/Serializer/Normalizer/MimeMessageNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/MimeMessageNormalizer.php index 7519ad69e25e9..a1e131835ab00 100644 --- a/src/Symfony/Component/Serializer/Normalizer/MimeMessageNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/MimeMessageNormalizer.php @@ -17,6 +17,7 @@ use Symfony\Component\Mime\Header\UnstructuredHeader; use Symfony\Component\Mime\Message; use Symfony\Component\Mime\Part\AbstractPart; +use Symfony\Component\Mime\RawMessage; use Symfony\Component\Serializer\SerializerAwareInterface; use Symfony\Component\Serializer\SerializerInterface; @@ -63,15 +64,18 @@ public function normalize($object, ?string $format = null, array $context = []) return $ret; } + $ret = $this->normalizer->normalize($object, $format, $context); + if ($object instanceof AbstractPart) { - $ret = $this->normalizer->normalize($object, $format, $context); $ret['class'] = \get_class($object); unset($ret['seekable'], $ret['cid'], $ret['handle']); + } - return $ret; + if ($object instanceof RawMessage && \array_key_exists('message', $ret) && null === $ret['message']) { + unset($ret['message']); } - return $this->normalizer->normalize($object, $format, $context); + return $ret; } /**