]> granicus.if.org Git - php/commitdiff
Finalize implode() patch
authorIlia Alshanetsky <iliaa@php.net>
Tue, 29 Aug 2006 14:32:16 +0000 (14:32 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Tue, 29 Aug 2006 14:32:16 +0000 (14:32 +0000)
ext/standard/string.c

index 8e5fb6f81929a2a477387084b5fcf6a5265b3329..9bb8304b8e3d41e6b94a6d179b54de6fb73f0af9 100644 (file)
@@ -905,7 +905,7 @@ PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value TSRMLS_DC)
 
                        case IS_LONG: {
                                char stmp[MAX_LENGTH_OF_LONG + 1];
-                               str_len = sprintf(stmp, "%ld", Z_LVAL_PP(tmp));
+                               str_len = snprintf(stmp, sizeof(stmp), "%ld", Z_LVAL_PP(tmp));
                                smart_str_appendl(&implstr, stmp, str_len);
                        }
                                break;
@@ -920,11 +920,10 @@ PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value TSRMLS_DC)
                                break;
 
                        case IS_DOUBLE: {
-                               char *stmp;
-                               stmp = emalloc(MAX_LENGTH_OF_DOUBLE + EG(precision) + 1);
-                               str_len = sprintf(stmp, "%.*G", (int) EG(precision), Z_DVAL_PP(tmp));
+                               char *stmp = (char *) do_alloca(MAX_LENGTH_OF_DOUBLE + EG(precision) + 2); /* +1 for decimal point */
+                               str_len = snprintf(stmp, sizeof(stmp),  "%.*G", (int) EG(precision), Z_DVAL_PP(tmp));
                                smart_str_appendl(&implstr, stmp, str_len);
-                               efree(stmp);
+                               free_alloca(stmp);
                        }
                                break;