Skip to content

PropertyAccessor treats methods as properties and invokes them during serialization #62733

@root-aza

Description

@root-aza

Symfony version(s) affected

7.x.x

Description

When serializing an object with symfony/serializer, the PropertyAccess component incorrectly decides whether to read a public property or call a method with the same name.

If a class contains public readonly properties and also defines methods with identical names, the PropertyAccessor attempts to invoke the method instead of reading the property, which leads to a runtime error.

How to reproduce

Repository: https://github.com/root-aza/symfony-issue-62733

Possible Solution

No response

Additional Context

StackTrace

PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function DocumentState::loaded(), 0 passed in /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php on line 401 and exactly 1 expected in /Users/aza/PhpstormProjects/symfony-issue-61552/app.php:72
Stack trace:
#0 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php(401): DocumentState::loaded()
#1 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php(102): Symfony\Component\PropertyAccess\PropertyAccessor->readProperty(Array, 'loaded', false)
#2 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php(149): Symfony\Component\PropertyAccess\PropertyAccessor->getValue(Object(DocumentState), 'loaded')
#3 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php(198): Symfony\Component\Serializer\Normalizer\ObjectNormalizer->getAttributeValue(Object(DocumentState), 'loaded', 'json', Array)
#4 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Serializer.php(152): Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->normalize(Object(DocumentState), 'json', Array)
#5 /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Serializer.php(131): Symfony\Component\Serializer\Serializer->normalize(Object(DocumentState), 'json', Array)
#6 /Users/aza/PhpstormProjects/symfony-issue-61552/app.php(80): Symfony\Component\Serializer\Serializer->serialize(Object(DocumentState), 'json')
#7 {main}
  thrown in /Users/aza/PhpstormProjects/symfony-issue-61552/app.php on line 72

Fatal error: Uncaught ArgumentCountError: Too few arguments to function DocumentState::loaded(), 0 passed in /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php on line 401 and exactly 1 expected in /Users/aza/PhpstormProjects/symfony-issue-61552/app.php on line 72

ArgumentCountError: Too few arguments to function DocumentState::loaded(), 0 passed in /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php on line 401 and exactly 1 expected in /Users/aza/PhpstormProjects/symfony-issue-61552/app.php on line 72

Call Stack:
    0.0001     407192   1. {main}() /Users/aza/PhpstormProjects/symfony-issue-61552/app.php:0
    0.0086    2476064   2. Symfony\Component\Serializer\Serializer->serialize() /Users/aza/PhpstormProjects/symfony-issue-61552/app.php:80
    0.0086    2476440   3. Symfony\Component\Serializer\Serializer->normalize() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Serializer.php:131
    0.0086    2477408   4. Symfony\Component\Serializer\Normalizer\ObjectNormalizer->normalize() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Serializer.php:152
    0.0090    2518784   5. Symfony\Component\Serializer\Normalizer\ObjectNormalizer->getAttributeValue() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:198
    0.0091    2518784   6. Symfony\Component\PropertyAccess\PropertyAccessor->getValue() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/serializer/Normalizer/ObjectNormalizer.php:149
    0.0091    2519000   7. Symfony\Component\PropertyAccess\PropertyAccessor->readProperty() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php:102
    0.0091    2524440   8. DocumentState::loaded() /Users/aza/PhpstormProjects/symfony-issue-61552/vendor/symfony/property-access/PropertyAccessor.php:401

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions