Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork9.6k
Closed as not planned
Description
Symfony version(s) affected
6.4
Description
The serialize and unserialize for stdClass works because of this code in the class ObjectNormalizer + method extractAttributes
if (\stdClass::class ===$object::class) {returnarray_keys((array)$object); }
but this code does not check for classes, that are extending stdClass.
How to reproduce
<?phpdeclare(strict_types =1);usestdClass;class Contactextends stdClass{publicstring$email ='';}
$encoders = [newJsonEncoder()];$classMetadataFactory =newClassMetadataFactory(newAttributeLoader());$metadataAwareNameConverter =newMetadataAwareNameConverter($classMetadataFactory);$extractor =newPropertyInfoExtractor([], [newPhpDocExtractor(),newReflectionExtractor()]);$objectNormalizer =newObjectNormalizer( classMetadataFactory:$classMetadataFactory, nameConverter:$metadataAwareNameConverter, propertyTypeExtractor:$extractor, defaultContext: [ AbstractObjectNormalizer::SKIP_UNINITIALIZED_VALUES =>true, AbstractObjectNormalizer::SKIP_NULL_VALUES =>true, AbstractObjectNormalizer::DISABLE_TYPE_ENFORCEMENT =>true, ], );$normalizers = [$objectNormalizer, ];$serializer =new Serializer($normalizers,$encoders)$contact =newContact();$contact->email ='foo@example.com';$contact->foo ='bar';$serializer->serialize($contact,'json')
Possible Solution
Better would be some additional code like this:
$classParents =class_parents($object::class);if (false !==$classParents &&in_array(\stdClass::class,$classParents)) {returnarray_keys((array)$object); }
Additional Context
No response