From: Xinchen Hui Date: Mon, 3 Mar 2014 08:56:54 +0000 (+0800) Subject: Fixed memory leak in php_uname X-Git-Tag: POST_PHPNG_MERGE~412^2~442 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7735226e365365a1ccae01158b2fb62d0b06ed16;p=php Fixed memory leak in php_uname --- diff --git a/ext/standard/info.c b/ext/standard/info.c index eba23a89c5..307bacd10a 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -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)); } /* }}} */ diff --git a/ext/standard/info.h b/ext/standard/info.h index 6775a2660c..8be58160ed 100644 --- a/ext/standard/info.h +++ b/ext/standard/info.h @@ -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()