Merge branch 'PHP-5.5' into PHP-5.6

Conflicts:
	ext/json/json.c
This commit is contained in:
Jakub Zelenka 2015-02-22 20:35:03 +00:00
commit 97d809a8a5
2 changed files with 26 additions and 16 deletions

View file

@ -427,25 +427,21 @@ static void json_escape_string(smart_str *buf, char *s, int len, int options TSR
if ((type = is_numeric_string(s, len, &p, &d, 0)) != 0) { if ((type = is_numeric_string(s, len, &p, &d, 0)) != 0) {
if (type == IS_LONG) { if (type == IS_LONG) {
smart_str_append_long(buf, p); smart_str_append_long(buf, p);
} else if (type == IS_DOUBLE) { return;
if (!zend_isinf(d) && !zend_isnan(d)) { } else if (type == IS_DOUBLE && !zend_isinf(d) && !zend_isnan(d)) {
char num[NUM_BUF_SIZE]; char num[NUM_BUF_SIZE];
int l; int l;
php_gcvt(d, EG(precision), '.', 'e', (char *)num); php_gcvt(d, EG(precision), '.', 'e', (char *)num);
l = strlen(num); l = strlen(num);
if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && l < NUM_BUF_SIZE - 2) { if (options & PHP_JSON_PRESERVE_ZERO_FRACTION && strchr(num, '.') == NULL && l < NUM_BUF_SIZE - 2) {
num[l++] = '.'; num[l++] = '.';
num[l++] = '0'; num[l++] = '0';
num[l] = '\0'; num[l] = '\0';
}
smart_str_appendl(buf, num, l);
} else {
JSON_G(error_code) = PHP_JSON_ERROR_INF_OR_NAN;
smart_str_appendc(buf, '0');
} }
smart_str_appendl(buf, num, l);
return;
} }
return;
} }
} }

View file

@ -0,0 +1,14 @@
--TEST--
Bug #64695 JSON_NUMERIC_CHECK has issues with strings that are numbers plus the letter e
--SKIPIF--
<?php if (!extension_loaded("json")) print "skip"; ?>
--FILE--
<?php
$t = array('test' => '123343e871700');
var_dump(json_encode($t, JSON_NUMERIC_CHECK));
echo "Done\n";
?>
--EXPECT--
string(24) "{"test":"123343e871700"}"
Done