-
Couldn't load subscription status.
- Fork 8k
Closed
Description
Description
The following code:
<?php
var_dump(array_sum([new GMP("9223372036854775806"), 1]));Resulted in this output:
float(9.223372036854775E+18)
But I expected this output instead:
int(9223372036854775807)
This is caused by an erroneous assumption in gmp_cast_object() for _IS_NUMBER casts (as such it can affect other functions as well), namely that ZEND_LONG would be a signed long, but that is not true for LLP64 data models where it is signed long long. On such platforms, values outside of range [INT_MIN, INT_MAX] are converted to float.
PHP Version
PHP-8.2
Operating System
Windows 64bit