Cap it at INT_MAX, yeah, that seems reasonable. A notice seems reasonable
but production servers displaying errors... devs will go mad :)
On Jul 18, 2012 11:39 PM, "Nikita Popov" <nikita....@gmail.com> wrote:

> Hi internals!
>
> When a large floating point number is cast to an integer we currently
> have very low-level C behavior (integer overflow and wraparound):
>
> $ /c/php-5.4.1/php -r 'var_dump((int) 4000000000);'
> int(-294967296)
>
> $ /c/php-5.4.1/php -r 'var_dump((int) 6000000000);'
> int(1705032704)
>
> As a fun fact, if you do the same thing with a string float the number
> if clipped instead of wrapped:
>
> $ /c/php-5.4.1/php -r 'var_dump((int) "4000000000");'
> int(2147483647)
>
> This also applies to zend_parse_parameters. l arguments are wrapped, L
> arguments are clipped.
>
> In my eyes this kind of behavior has nothing to do in PHP. PHP is a
> high-level language, it shouldn't exhibit low-level stuff like integer
> overflows and wraparound.
>
> I think that at least for zend_parse_parameters this should be
> changed. Overflowing float parameters should not be accepted. Instead
> throw the usual E_WARNING and return FAILURE.
>
> I'm not sure though what one should do about the explicit (int) cast.
> My preference would be to throw a notice and use the clipping
> behavior.
>
> Thoughts?
>
> Nikita
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>
>

Reply via email to