From c9bff461bc8b13a5e0e35537692ba01c41902cf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Dunglas?= Date: Mon, 4 May 2015 08:35:51 +0200 Subject: [PATCH] [Serializer] Ignore \Traversable in default normalizers. Close #14495. --- .../Serializer/Normalizer/GetSetMethodNormalizer.php | 2 +- .../Component/Serializer/Normalizer/ObjectNormalizer.php | 2 +- .../Component/Serializer/Normalizer/PropertyNormalizer.php | 2 +- .../Tests/Normalizer/GetSetMethodNormalizerTest.php | 5 +++++ .../Serializer/Tests/Normalizer/ObjectNormalizerTest.php | 5 +++++ .../Serializer/Tests/Normalizer/PropertyNormalizerTest.php | 5 +++++ 6 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php index b246ab091867..de4c3ece1dc9 100644 --- a/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/GetSetMethodNormalizer.php @@ -127,7 +127,7 @@ public function denormalize($data, $class, $format = null, array $context = arra */ public function supportsNormalization($data, $format = null) { - return is_object($data) && $this->supports(get_class($data)); + return is_object($data) && !$data instanceof \Traversable && $this->supports(get_class($data)); } /** diff --git a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php index 86af5c677f44..ba84ac717f07 100644 --- a/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/ObjectNormalizer.php @@ -43,7 +43,7 @@ public function __construct(ClassMetadataFactoryInterface $classMetadataFactory */ public function supportsNormalization($data, $format = null) { - return is_object($data); + return is_object($data) && !$data instanceof \Traversable; } /** diff --git a/src/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php index e6aef0774168..4253d3dd0e14 100644 --- a/src/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/PropertyNormalizer.php @@ -127,7 +127,7 @@ public function denormalize($data, $class, $format = null, array $context = arra */ public function supportsNormalization($data, $format = null) { - return is_object($data) && $this->supports(get_class($data)); + return is_object($data) && !$data instanceof \Traversable && $this->supports(get_class($data)); } /** diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php index 65adfe4c2a7c..b4c82391d79a 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/GetSetMethodNormalizerTest.php @@ -502,6 +502,11 @@ public function testDenormalizeNonExistingAttribute() $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\PropertyDummy') ); } + + public function testNoTraversableSupport() + { + $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject())); + } } class GetSetDummy diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 433c98526684..f07e79907fb6 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -429,6 +429,11 @@ public function testDenormalizeNonExistingAttribute() $this->normalizer->denormalize(array('non_existing' => true), __NAMESPACE__.'\ObjectDummy') ); } + + public function testNoTraversableSupport() + { + $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject())); + } } class ObjectDummy diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php index 655241073f37..714598f3d587 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/PropertyNormalizerTest.php @@ -419,6 +419,11 @@ public function testUnableToNormalizeObjectAttribute() $this->normalizer->normalize($obj, 'any'); } + + public function testNoTraversableSupport() + { + $this->assertFalse($this->normalizer->supportsNormalization(new \ArrayObject())); + } } class PropertyDummy