Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
From: keith at openx dot com Date: Tue, 23 Apr 2013 04:28:21 +0000 Subject: Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e References: 1 Groups: php.bugs Request: Send a blank email to php-bugs+get-178589@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=64695&edit=1
ID: 64695
Comment by: keith at openx dot com
Reported by: keith at openx dot com
Summary: JSON_NUMERIC_CHECK has issues with strings that are
numbers plus the letter e
Status: Open
Type: Bug
Package: JSON related
Operating System: CentOS/OSX
PHP Version: 5.3.24
Block user comment: N
Private report: N
New Comment:
So, I noticed on the is_numeric page that:
"Thus +0123.45e6 is a valid numeric value."
But can that be explained as to why that this? It breaks json_encode when
JSON_NUMERIC_CHECK is called in certain situations. The function
'is_numeric_string' returns the type 'double' for strings like
"3e122345", and
that isn't a double.
My patch updated 'is_numeric_string' which might be too agressive. Maybe updating
json.c is a better alternative.
Previous Comments:
------------------------------------------------------------------------
[2013-04-23 04:15:14] keith at openx dot com
Description:
------------
So, it looks like that when you call json_encode with the JSON_NUMERIC_CHECK
option on strings that have all numbers except for one letter 'e' PHP throws a
warning:
PHP Warning: json_encode(): double INF does not conform to the JSON spec,
encoded as 0 in php shell code on line 1
It happens only on certain strings that make PHP think the number is very large.
According to the docs the 'e' should be followed with +/-, but it seems that
isn't the case.
This causes a problem whenever converting values that are, say, hashed with SHA1.
Since the valid characters are [0-9][A-F], it's very possible to have a value
that is: [0-9]e[0-9]
Test script:
---------------
<?php
$t = array('test' => '123343e871700');
var_dump(json_encode($t, JSON_NUMERIC_CHECK));
Expected result:
----------------
string(10) "{"test":"123343e871700"}"
Actual result:
--------------
PHP Warning: json_encode(): double INF does not conform to the JSON spec,
encoded as 0 in php shell code on line 1
string(10) "{"test":0}"
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=64695&edit=1
Thread (17 messages)
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Opn]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Asn->Csd]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Csd]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Csd]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Csd]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
- Bug #64695 [Com]: JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
| « previous | php.bugs (#178589) | next » |
|---|