On Thu, Aug 31, 2017 at 2:58 AM Andrea Faulds <a...@ajf.me> wrote:

> Hi there,
>
> Andrew Nester wrote:
> >
> >
> > Hello internals!
> >
> > I was working on solution for the problem of double to int conversion
> for array indices and would like to create an RFC for proposed solution -
> emitting warning when integer overflow happens during double to int
> conversion.
> >
> > Does it look like good idea?
> >
> > Thanks!
> >
>
> It's certainly an improvement over silently truncate-wrapping like at
> present.
>
> But one question I might have is whether there's any benefit to it just
> being a warning rather than an Error. Surely nobody would rely on this
> behaviour? I can't imagine a use-case where it doing % 2^64 on your
> indices is helpful. Who would want the code execution to continue beyond
> that point? Will someone want to silence this error?
>
> Compare how the `int` type declaration on userland functions handles
> floats like these: it throws a TypeError. Internal functions *do* throw
> a warning, but they don't execute their body and return NULL instead
> (they do throw a TypeError in strict mode).
>
> If you threw some kind of Error instead, I can't imagine it causing
> backwards-compatibility problems in practice, and at least personally, I
> think it would be the better choice. But I wrote the RFC that made
> passing floats > PHP_INT_MAX or < PHP_INT_MIN to functions with integer
> parameters produce those errors, so of course I'd say that…
>
> Anyway, thanks for bringing this up! It's something that I've wanted to
> fix since a long time ago and had forgotten about.
>

(Bumping an old discussion here)

I think the parallel with how we handle this for int parameters is a good
one, and it would make sense to throw a TypeError when trying to use an out
of range float key in an array. I'm slightly uneasy about the
value-dependent behavior (e.g. your code might start throwing because the
user entered a particularly large value somewhere). However, the argument
applies to parameter handling in the same way, and as far as I know our
behavior there has never proven to be a problem. And as using an out of
range value essentially produces a nonsense result (say a negative number
though your input was positive), I think pointing out the issue with a
TypeError would be a win anyway...

Nikita

Reply via email to