]> granicus.if.org Git - php/commitdiff
Fixed memory leak in php_uname
authorXinchen Hui <laruence@gmail.com>
Mon, 3 Mar 2014 08:56:54 +0000 (16:56 +0800)
committerXinchen Hui <laruence@gmail.com>
Mon, 3 Mar 2014 08:56:54 +0000 (16:56 +0800)
ext/standard/info.c
ext/standard/info.h

index eba23a89c585d9abf8232dad74345512e3b59e60..307bacd10ac3563d7e3c24b8a2e1321a3c6e3ae0 100644 (file)
@@ -525,7 +525,7 @@ void php_get_windows_cpu(char *buf, int bufsize)
 
 /* {{{ php_get_uname
  */
-PHPAPI char *php_get_uname(char mode)
+PHPAPI zend_string *php_get_uname(char mode)
 {
        char *php_uname;
        char tmp_uname[256];
@@ -627,7 +627,7 @@ PHPAPI char *php_get_uname(char mode)
        php_uname = PHP_UNAME;
 #endif
 #endif
-       return estrdup(php_uname);
+       return STR_INIT(php_uname, strlen(php_uname), 0);
 }
 /* }}} */
 
@@ -662,7 +662,7 @@ static int module_name_cmp(const void *a, const void *b TSRMLS_DC)
 PHPAPI void php_print_info(int flag TSRMLS_DC)
 {
        char **env, *tmp1, *tmp2;
-       char *php_uname;
+       zend_string *php_uname;
 
        if (!sapi_module.phpinfo_as_text) {
                php_print_info_htmlhead(TSRMLS_C);
@@ -702,8 +702,8 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
                }
                php_info_print_box_end();
                php_info_print_table_start();
-               php_info_print_table_row(2, "System", php_uname );
-               php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__ );
+               php_info_print_table_row(2, "System", php_uname->val);
+               php_info_print_table_row(2, "Build Date", __DATE__ " " __TIME__);
 #ifdef COMPILER
                php_info_print_table_row(2, "Compiler", COMPILER);
 #endif
@@ -805,7 +805,7 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
                        zend_html_puts(zend_version, strlen(zend_version) TSRMLS_CC);
                }
                php_info_print_box_end();
-               efree(php_uname);
+               STR_FREE(php_uname);
        }
 
        zend_ini_sort_entries(TSRMLS_C);
@@ -1221,8 +1221,7 @@ PHP_FUNCTION(php_uname)
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s", &mode, &modelen) == FAILURE) {
                return;
        }
-//???  RETURN_STRING(php_get_uname(*mode), 0);
-       RETURN_STRING(php_get_uname(*mode));
+       RETURN_STR(php_get_uname(*mode));
 }
 
 /* }}} */
index 6775a2660c691daaa1abca9c79cdbbb65064a055..8be58160ed79ac1ff0516d852a2502b4ac0e81a2 100644 (file)
@@ -79,7 +79,7 @@ PHPAPI void php_info_print_box_start(int bg);
 PHPAPI void php_info_print_box_end(void);
 PHPAPI void php_info_print_hr(void);
 PHPAPI void php_info_print_module(zend_module_entry *module TSRMLS_DC);
-PHPAPI char *php_get_uname(char mode);
+PHPAPI zend_string *php_get_uname(char mode);
 
 void register_phpinfo_constants(INIT_FUNC_ARGS);
 END_EXTERN_C()