From 91d9427cac8632ee05a4f7a3267061e993eee4d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Laugks?= Date: Thu, 16 Mar 2023 11:31:02 +0100 Subject: [PATCH] [Serializer] Fix reindex normalizedData array in AbstractObjectNormalizer::denormalize() --- .../Normalizer/AbstractObjectNormalizer.php | 2 +- .../AbstractObjectNormalizerTest.php | 26 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index 1717426161d49..069d2e3935f62 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -339,7 +339,7 @@ public function denormalize(mixed $data, string $type, string $format = null, ar $normalizedData = $this->removeNestedValue($serializedPath->getElements(), $normalizedData); } - $normalizedData = array_merge($normalizedData, $nestedData); + $normalizedData = $normalizedData + $nestedData; $object = $this->instantiateObject($normalizedData, $mappedClass, $context, new \ReflectionClass($mappedClass), $allowedAttributes, $format); $resolvedClass = ($this->objectClassResolver)($object); diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php index 61345a414eea4..8eb77718c4ac9 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/AbstractObjectNormalizerTest.php @@ -787,6 +787,32 @@ classMetadataFactory: new ClassMetadataFactory(new AnnotationLoader()), $normalized = $serializer->normalize(new DummyWithEnumUnion(EnumB::B)); $this->assertEquals(new DummyWithEnumUnion(EnumB::B), $serializer->denormalize($normalized, DummyWithEnumUnion::class)); } + + public function testDenormalizeWithNumberAsSerializedNameAndNoArrayReindex() + { + $normalizer = new AbstractObjectNormalizerWithMetadata(); + + $data = [ + '1' => 'foo', + '99' => 'baz', + ]; + + $obj = new class() { + /** + * @SerializedName("1") + */ + public $foo; + + /** + * @SerializedName("99") + */ + public $baz; + }; + + $test = $normalizer->denormalize($data, $obj::class); + $this->assertSame('foo', $test->foo); + $this->assertSame('baz', $test->baz); + } } class AbstractObjectNormalizerDummy extends AbstractObjectNormalizer