]> granicus.if.org Git - php/commitdiff
Added monetary.h to prevent compile warning.
authorIlia Alshanetsky <iliaa@php.net>
Wed, 21 Aug 2002 13:14:57 +0000 (13:14 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 21 Aug 2002 13:14:57 +0000 (13:14 +0000)
Fixed a memory leak inside money_format function, which occures if the
parameters to the function are not valid.
Fixed a segmentation fault inside money_format in the event the value
to be formated is >1024 bytes.
Made the return value of money_format be null terminated.

ext/standard/string.c

index 48f87e02b31ab70aec25ec44790d4bda9bb96d99..7da32a9ec3e7ca503d6a2b755ab4eddec7daba9f 100644 (file)
@@ -33,6 +33,9 @@
 #ifdef HAVE_LANGINFO_H
 # include <langinfo.h>
 #endif
+#ifdef HAVE_MONETARY_H
+# include <monetary.h>
+#endif
 #include "scanf.h"
 #include "zend_API.h"
 #include "zend_execute.h"
@@ -3909,8 +3912,8 @@ PHP_FUNCTION(str_rot13)
    Convert monetary value(s) to string */
 
 PHP_FUNCTION(money_format) {
-       int format_len, str_len = 1024;
-       char *format, *str = emalloc(str_len);
+       int format_len = 0, str_len;
+       char *format, *str;
        double value;
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sd",
@@ -3918,9 +3921,12 @@ PHP_FUNCTION(money_format) {
                return;
        }
 
+       str_len = format_len + 1024;
+       str = emalloc(str_len);
        str_len = strfmon(str, str_len, format, value);         
+       str[str_len] = 0;
 
-       RETURN_STRINGL(erealloc(str, strlen), str_len, 0);
+       RETURN_STRINGL(erealloc(str, str_len + 1), str_len, 0);
 }
 
 /* }}} */