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

Reply via email to