Fix intval() and floatval() call with a non scalar value #2351
+11
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Here is a code snippet that shows a misleading error when
intval()
is used with a non-scalar.It's reproducible with
checkBenevolentUnionTypes: true
I've traced the issue.
intval()
with non-scalar argument resolves toErrorType
which is inherited fromMixedType
.So
ErrorType::toNumber()
returnsUnionType of int and float
. When above math expression is resolved it hasint
on the left side andfloat|int
on the right side which produces error whencheckBenevolentUnionTypes
is on.The root cause is fixed in this PR. It adds non-scalar value handling by making sure that return type for intval/floatval in all cases is
int
i.e.float
.PHP is throwing a warning on use of non-scalar with intval/floatval and not an error like with strval, so even though non-scalar arguments shouldn't be used we should handle them.