Skip to content

AbstractSurrogateFragmentRenderer does not detect non-scalar attributes reliably #46152

Closed
@m-vo

Description

@m-vo

Symfony version(s) affected

4.4 - current

Description

The AbstractSurrogateFragmentRenderer throws an exception if non-scalar values are passed as attributes, but the detection has an early returns in case an attribute's $value is an array:

private function containsNonScalars(array $values): bool
{
foreach ($values as $value) {
if (\is_array($value)) {
return $this->containsNonScalars($value);
} elseif (!is_scalar($value) && null !== $value) {
return true;
}
}
return false;
}

How to reproduce

Pass on attributes in the form [[], <non-scalar>], containsNonScalars will return false instead of true.

Possible Solution

Something like this:

private function containsNonScalars(array $values): bool
{
    foreach ($values as $value) {
        if (\is_array($value) && $this->containsNonScalars($value)) {
            return true;
        }

        if (!is_scalar($value) && null !== $value) {
            return true;
        }
    }
}

Additional Context

No response

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