Re: Adding "numeric" type hint
| From: | Yasuo Ohgaki | Date: | Thu, 30 Apr 2015 04:38:03 +0000 |
| Subject: | Re: Adding "numeric" type hint | ||
| References: | 1 2 3 4 5 6 7 8 9 10 11 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-86063@lists.php.net to get a copy of this message | ||
Dan,
On Thu, Apr 30, 2015 at 12:02 PM, Dan Ackroyd <danack@basereality.com>
wrote:
> On 30 April 2015 at 02:17, Yasuo Ohgaki <yohgaki@ohgaki.net> wrote:
> > Current PHP: Search query failure.
> > New PHP type hint: Fatal error because foreign key is out of PHP int
> range.
>
> There may be some confusion; NikiC is still doing some work to tidy up
> the EngineExceptions. When that is finished passing a variable of the
> wrong type will give a TypeException.
>
> > If user are using type hints everywhere, it may be limited to attackers
> > seeing fatal errors. If not, attacker can succeed system wide DoS attack
> by
> > simple operation.
>
> Passing in invalid primary keys should never result in a DoS
> attack...and I have no idea why you think it would be due to the
> presence or absence of scalar type hints.
>
It's very simple. PHP int can be smaller than DBMS's int.
With type hints, valid ID can cause fatal error.
>
>
> Yasuo wrote:
> > How many of us are expected that
> > mydb_find_by_id(INT_MAX+1);
> > Note: INT_MAX+1 is pseudo integer string value.
>
> Well currently it isn't:
>
> var_dump(PHP_INT_MAX + 1);
> float(9.2233720368548E+18)
>
You should realize that DBMS returns values as strings. Record ID included,
of course.
>
>
> Yasuo wrote:
> > How about have "numeric" type hint that accepts any format/class(GMP)
> > of numeric values?
> >
> > The issue is that weak mode type hint is *not* weak at all. It forces to
> > have machine native type rather than it's data form.
>
> So what you're suggesting is adding a numeric type that acts like GMP
> and allow arbitrary precision arithmetic on values? Isn't that just
> GMP? Except you'd need to convert the variable to be 'numeric' before
> doing any operation on it i.e. something like:
>
> $x = (numeric)INT_MAX;
> mydb_find_by_id($x+1);
>
> Unless you're also suggesting replacing PHP's current maths operations...
Have you ever try to change record ID supplied by DBMS? I guess not.
In this case, IDs are integer like string and it works perfectly regardless
of PHP int type.
Regards,
--
Yasuo Ohgaki
yohgaki@ohgaki.net