Hi Ilia,
I take it there aren't any issues in array.c or wddx.c?
Anyway, I wanted to point out one more is_numeric_* functionality change
that I skipped in my original message, but I think it's probably a logic bug
in the old code. The end of the old function is:
if (end_ptr_double>end_ptr_long && dval) {
*dval = local_dval;
return IS_DOUBLE;
} else if (end_ptr_long && lval) {
*lval = local_lval;
return IS_LONG;
}
return 0;
It's only reached if a partial numeric match (non-zero allow_errors) is
allowed. I've not tested it, but as far as I can tell, that means if an
is_numeric_* call wanted to know about a partial match and didn't have a
pointer for the corresponding type, 0 would incorrectly be returned (or
possibly IS_LONG in case of a double). I don't know if this is much of a
real issue...
>From checking http://lxr.php.net, the first difference (returning 0) exists
in pecl/http/http_functions.c and http_request_api.c.
And either difference exists in ext/curl/streams.c. Again, not tested, but
it looks like the string '1.23foo' (double) would be treated as a long and
incorrectly fill "mr" with 1, but the string '1.23' (full match) would not.
Hope that's correct. I believe the old code was wrong, and it's correct to
treat full and partial matches the same, which my new version does.
Matt
----- Original Message -----
From: "Ilia Alshanetsky"
Sent: Tuesday, December 12, 2006
> Matt,
>
> Take a look at array.c and wddx.c
>
> On 12-Dec-06, at 11:14 AM, Matt Wilmas wrote:
>
> > ----- Original Message -----
> > From: "Ilia Alshanetsky"
> > Sent: Tuesday, December 12, 2006
> >
> >> As far as I can tell all tests still pass with the patch, although we
> >> have a number of is_numeric_string() uses that will need to be
> >> adjusted to accommodate the change to the function.
> >
> > Really, like what? I didn't see anything that stuck out...
> >
> >> Ilia Alshanetsky
> >
> > Matt
>
> Ilia Alshanetsky
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php