]> granicus.if.org Git - php/commitdiff
Use stack memory here to avoid mem leak
authorXinchen Hui <laruence@gmail.com>
Mon, 3 Mar 2014 08:39:29 +0000 (16:39 +0800)
committerXinchen Hui <laruence@gmail.com>
Mon, 3 Mar 2014 08:39:29 +0000 (16:39 +0800)
ext/standard/math.c

index c12764c29b19bbeb2f331d1ce8198fd2da0acbc9..0fcbdb891521bf674931ce63a3929db1e96731ba 100644 (file)
@@ -1101,7 +1101,7 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, char *dec_poin
                size_t dec_point_len, char *thousand_sep, size_t thousand_sep_len)
 {
        zend_string *res;
-       char *tmpbuf = NULL;
+       char tmpbuf[MAX_LENGTH_OF_DOUBLE];
        char *s, *t;  /* source, target */
        char *dp;
        int integral;
@@ -1117,10 +1117,9 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, char *dec_poin
        dec = MAX(0, dec);
        d = _php_math_round(d, dec, PHP_ROUND_HALF_UP);
 
-       tmplen = spprintf(&tmpbuf, 0, "%.*F", dec, d);
+       tmplen = snprintf(tmpbuf, sizeof(tmpbuf), "%.*F", dec, d);
 
        if (tmpbuf == NULL || !isdigit((int)tmpbuf[0])) {
-//???          return tmpbuf;
                return STR_INIT(tmpbuf, tmplen, 0);
        }
 
@@ -1206,8 +1205,6 @@ PHPAPI zend_string *_php_math_number_format_ex(double d, int dec, char *dec_poin
                *t-- = '-';
        }
 
-       efree(tmpbuf);
-       
        res->len = reslen;
        return res;
 }