mirror of
https://github.com/php/php-src.git
synced 2024-09-21 18:07:23 +00:00
Fixed bug #72100 (implode() inserts garbage into resulting string when joins very big integer). (Mikhail Galanin)
This commit is contained in:
parent
92233dd736
commit
8f0ceb97cf
2
NEWS
2
NEWS
@ -4,6 +4,8 @@ PHP NEWS
|
||||
|
||||
- Core:
|
||||
. Fixed bug #72101 (crash on complex code). (Dmitry)
|
||||
. Fixed bug #72100 (implode() inserts garbage into resulting string when
|
||||
joins very big integer). (Mikhail Galanin)
|
||||
. Fixed bug #72057 (PHP Hangs when using custom error handler and typehint).
|
||||
(Nikita Nefedov)
|
||||
. Fixed bug #72038 (Function calls with values to a by-ref parameter don't
|
||||
|
@ -1229,16 +1229,16 @@ PHPAPI void php_implode(const zend_string *delim, zval *arr, zval *return_value)
|
||||
|
||||
ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(arr), tmp) {
|
||||
if (Z_TYPE_P(tmp) == IS_LONG) {
|
||||
double val = Z_LVAL_P(tmp);
|
||||
zend_long val = Z_LVAL_P(tmp);
|
||||
|
||||
*++strptr = NULL;
|
||||
((zend_long *) (strings + numelems))[strptr - strings] = Z_LVAL_P(tmp);
|
||||
if (val < 0) {
|
||||
val = -10 * val;
|
||||
}
|
||||
if (val < 10) {
|
||||
if (val <= 0) {
|
||||
len++;
|
||||
}
|
||||
while (val) {
|
||||
val /= 10;
|
||||
len++;
|
||||
} else {
|
||||
len += (int) log10(10 * (double) val);
|
||||
}
|
||||
} else {
|
||||
*++strptr = zval_get_string(tmp);
|
||||
|
18
ext/standard/tests/strings/bug72100.phpt
Normal file
18
ext/standard/tests/strings/bug72100.phpt
Normal file
@ -0,0 +1,18 @@
|
||||
--TEST--
|
||||
Test implode() function, problems with big numbers
|
||||
--SKIPIF--
|
||||
<?php
|
||||
if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only");
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump( implode(" ", ["hello long", 999999999999999999, PHP_INT_MAX]));
|
||||
var_dump( implode(" ", ["hello negative long", -999999999999999999, PHP_INT_MIN] ) );
|
||||
var_dump( implode(" ", ["hello small long", -101, -100, -99, -90, -11, -10, -9, -1, 0, 1, 2, 9, 10, 11, 90, 99, 100, 101] ) );
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
string(49) "hello long 999999999999999999 9223372036854775807"
|
||||
string(60) "hello negative long -999999999999999999 -9223372036854775808"
|
||||
string(76) "hello small long -101 -100 -99 -90 -11 -10 -9 -1 0 1 2 9 10 11 90 99 100 101"
|
||||
Done
|
Loading…
Reference in New Issue
Block a user