From 5d4d0a6ebf5833ffea02d91bfb5ba52a603dc0e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 29 Feb 2016 13:59:26 +0100 Subject: [PATCH 1/2] [Serializer] Harden the ObjectNormalizer --- .../Normalizer/AbstractObjectNormalizer.php | 8 +++++++- .../Tests/Normalizer/ObjectNormalizerTest.php | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index bbce4255b1ab9..28755eca57315 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -11,8 +11,10 @@ namespace Symfony\Component\Serializer\Normalizer; +use Symfony\Component\PropertyAccess\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\CircularReferenceException; use Symfony\Component\Serializer\Exception\LogicException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException; /** * Base class for a normalizer dealing with objects. @@ -172,7 +174,11 @@ public function denormalize($data, $class, $format = null, array $context = arra $ignored = in_array($attribute, $this->ignoredAttributes); if ($allowed && !$ignored) { - $this->setAttributeValue($object, $attribute, $value, $format, $context); + try { + $this->setAttributeValue($object, $attribute, $value, $format, $context); + } catch (InvalidArgumentException $e) { + throw new UnexpectedValueException($e->getMessage(), $e->getCode(), $e); + } } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 367ff3799ec64..88ccdee0081f3 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -498,6 +498,14 @@ public function testMaxDepth() $this->assertEquals($expected, $result); } + + /** + * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException + */ + public function testThrowUnexpectedValueException() + { + $this->normalizer->denormalize(array('foo' => 'bar'), ObjectTypeHinted::class); + } } class ObjectDummy @@ -658,3 +666,10 @@ public static function getBaz() return 'L'; } } + +class ObjectTypeHinted +{ + public function setFoo(array $f) + { + } +} From 46cc24815261149565d19a63b7fbcc2493565e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Sun, 27 Mar 2016 15:56:16 +0200 Subject: [PATCH 2/2] Add a conflict section --- src/Symfony/Component/Serializer/composer.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/Symfony/Component/Serializer/composer.json b/src/Symfony/Component/Serializer/composer.json index f17da4d2aafc0..572561639db5b 100644 --- a/src/Symfony/Component/Serializer/composer.json +++ b/src/Symfony/Component/Serializer/composer.json @@ -27,6 +27,9 @@ "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0" }, + "conflict": { + "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4" + }, "suggest": { "psr/cache-implementation": "For using the metadata cache.", "symfony/yaml": "For using the default YAML mapping loader.",