]> granicus.if.org Git - php/commitdiff
Ran wrong tests, fixed bug in impl; simplified
authorBob Weinand <bobwei9@hotmail.com>
Mon, 25 May 2015 23:43:56 +0000 (01:43 +0200)
committerBob Weinand <bobwei9@hotmail.com>
Mon, 25 May 2015 23:43:56 +0000 (01:43 +0200)
ext/standard/string.c

index 7dad1b67ff1fb13d656af68b90fc1efc7e4589ae..8d95290ca28b8cd82fb0295b1298d4e09ac11ae7 100644 (file)
@@ -1223,9 +1223,17 @@ 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);
                        *++strptr = NULL;
                        ((zend_long *) (strings + numelems))[strptr - strings] = Z_LVAL_P(tmp);
-                       len += (int) log10(Z_LVAL_P(tmp) < 0 ? -100 * ((double) Z_LVAL_P(tmp) - 0.001) : 10 * ((double) Z_LVAL_P(tmp) + 0.01));
+                       if (val < 0) {
+                               val = -10 * val;
+                       }
+                       if (val < 10) {
+                               len++;
+                       } else {
+                               len += (int) log10(10 * (double) val);
+                       }
                } else {
                        *++strptr = zval_get_string(tmp);
                        len += (*strptr)->len;