|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2007-02-07 19:56 UTC] tuxracer69 at gmail dot com
Description: ------------ After compiling the last CVS snapshot (5.2) ./configure \ --with-pgsql --with-curl --with-xml \ --enable-sockets --with-zlib --with-bz2 \ --with-iconv --enable-track-vars --enable-sysvsem \ --enable-sysvshm --enable-inline-optimization \ --with-curl --with-regex=system --with-png \ --enable-discard-path --enable-dbx --enable-memory-limit \ --disable-debug --disable-rpath --with-openssl \ --enable-exif --enable-mbstring \ --with-xsl=/usr/lib \ --with-milter --disable-cli --disable-cgi --enable-debug and launching the example milter I was getting the memory leaks warnings below. ----------------- /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(304) : Freeing 0xA5E46184 (44 bytes), script=- /usr/local/php5.2-200702061930/Zend/zend_API.c(819) : Actual location (location was relayed) Last leak repeated 1 time [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(196) : Freeing 0xA5E464 70 (10 bytes), script=- [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(346) : Freeing 0xA5E466 C4 (3 bytes), script=- Last leak repeated 5 times [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/Zend/zend_API.c(1193) : Freeing 0xA5E466F8 (16 bytes), script=- Last leak repeated 2 times [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(229) : Freeing 0xA5E468A8 (10 bytes), script=- [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/Zend/zend_API.c(1194) : Freeing 0xA5E468E4 (17 bytes), script=- Last leak repeated 2 times [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/Zend/zend_API.c(1196) : Freeing 0xA5E46958 (35 bytes), script=- /usr/local/php5.2-200702061930/Zend/zend_hash.c(388) : Actual location (location was relayed) Last leak repeated 2 times [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(411) : Freeing 0xA5E46E D8 (43 bytes), script=- [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(347) : Freeing 0xA5E470 50 (40 bytes), script=- Last leak repeated 5 times [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(264) : Freeing 0xA5E49A 58 (32 bytes), script=- /usr/local/php5.2-200702061930/Zend/zend_alloc.c(1917) : Actual location (location was relayed) Last leak repeated 1 time [Wed Feb 7 10:20:03 2007] Script: '-' /usr/local/php5.2-200702061930/sapi/milter/php_milter.c(192) : Freeing 0xA5E505E8 (16 bytes), script=- === Total 29 memory leaks detected === --------------- The TODO file in the distribution mention such leaks. Reproduce code: --------------- the milter.php in the milter sapi distribution Expected result: ---------------- no memory leaks Actual result: -------------- a lot of memory leaks warnings. PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 04:00:02 2025 UTC |
Unified diff for the code change above: diff -u php_milter.c.dist php_milter.c --- php_milter.c.dist 2007-02-07 10:18:03.000000000 +0000 +++ php_milter.c 2007-02-07 19:41:54.000000000 +0000 @@ -202,7 +202,7 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; - + zval_ptr_dtor(param); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); } @@ -235,8 +235,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -275,8 +275,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -316,7 +316,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -354,8 +355,9 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); - FREE_ZVAL(param[1]); + zval_ptr_dtor(¶m[0]); + zval_ptr_dtor(¶m[1]); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -418,7 +420,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval);a longer patch aimed at fixing besides the mem leaks the compile warnings (type cast, declarations, parenthesis). diff -u php_milter.c.dist php_milter.c --- php_milter.c.dist 2007-02-07 10:18:03.000000000 +0000 +++ php_milter.c 2007-02-09 08:01:01.000000000 +0000 @@ -63,6 +63,8 @@ #include "libmilter/mfapi.h" +#include "php_getopt.h" + #define OPTSTRING "ac:d:Def:hnp:vVz:?" #define MG(v) TSRMG(milter_globals_id, zend_milter_globals *, v) @@ -202,7 +204,7 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; - + zval_ptr_dtor(param); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); } @@ -235,8 +237,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -275,8 +277,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -316,7 +318,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -354,8 +357,9 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); - FREE_ZVAL(param[1]); + zval_ptr_dtor(¶m[0]); + zval_ptr_dtor(¶m[1]); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -408,7 +412,7 @@ INIT_PZVAL(param[0]); ZVAL_STRING(&function_name, "milter_body", 0); - ZVAL_STRINGL(param[0], bodyp, len, 1); + ZVAL_STRINGL(param[0], (char*)bodyp, len, 1); /*alex*/ /* set the milter context for possible use in API functions */ MG(ctx) = ctx; @@ -418,7 +422,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -548,7 +553,7 @@ if (MG(state) != MLFI_INIT) { php_error(E_WARNING, NOT_INIT, get_active_function_name(TSRMLS_C)); } else if (zend_parse_parameters(1 TSRMLS_CC, "l", &flags) == SUCCESS) { - flags = flags & SMFIF_ADDHDRS|SMFIF_CHGHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT; + flags = flags & (SMFIF_ADDHDRS|SMFIF_CHGHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT); smfilter.xxfi_flags = flags; } } @@ -703,7 +708,7 @@ if (MG(state) != MLFI_EOM) { php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C)); } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &body, &len) == SUCCESS) { - if (smfi_replacebody(MG(ctx), body, len) == MI_SUCCESS) { + if (smfi_replacebody(MG(ctx), (u_char*)body, len) == MI_SUCCESS) { RETURN_TRUE; } } @@ -732,6 +737,7 @@ MG(state) = MLFI_NONE; MG(initialized) = 0; + return SUCCESS; } /* }}} */ @@ -920,9 +926,7 @@ /* temporary locals */ int orig_optind=ap_php_optind; char *orig_optarg=ap_php_optarg; - char *arg_free=NULL, **arg_excp=&arg_free; int interactive=0; - char *exec_direct=NULL; char *param_error=NULL; /* end of temporary locals */ @@ -1099,7 +1103,7 @@ openlog("php-milter", LOG_PID, LOG_MAIL); - if (exit_status = mlfi_init()) { + if (exit_status == mlfi_init()) { syslog(1, "mlfi_init failed."); exit(exit_status); }oops the exit_status was broken, should be: diff -u php_milter.c.dist php_milter.c --- php_milter.c.dist 2007-02-07 10:18:03.000000000 +0000 +++ php_milter.c 2007-02-09 08:48:03.000000000 +0000 @@ -63,6 +63,8 @@ #include "libmilter/mfapi.h" +#include "php_getopt.h" + #define OPTSTRING "ac:d:Def:hnp:vVz:?" #define MG(v) TSRMG(milter_globals_id, zend_milter_globals *, v) @@ -202,7 +204,7 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; - + zval_ptr_dtor(param); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); } @@ -235,8 +237,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -275,8 +277,8 @@ call_user_function(CG(function_table), NULL, &function_name, &retval, 1, param TSRMLS_CC); MG(state) = MLFI_NONE; + zval_ptr_dtor(param); - FREE_ZVAL(param[0]); if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -316,7 +318,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -354,8 +357,9 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); - FREE_ZVAL(param[1]); + zval_ptr_dtor(¶m[0]); + zval_ptr_dtor(¶m[1]); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -408,7 +412,7 @@ INIT_PZVAL(param[0]); ZVAL_STRING(&function_name, "milter_body", 0); - ZVAL_STRINGL(param[0], bodyp, len, 1); + ZVAL_STRINGL(param[0], (char*)bodyp, len, 1); /*alex*/ /* set the milter context for possible use in API functions */ MG(ctx) = ctx; @@ -418,7 +422,8 @@ MG(state) = MLFI_NONE; - FREE_ZVAL(param[0]); + zval_ptr_dtor(param); + if (Z_TYPE(retval) == IS_LONG) { return Z_LVAL(retval); @@ -548,7 +553,7 @@ if (MG(state) != MLFI_INIT) { php_error(E_WARNING, NOT_INIT, get_active_function_name(TSRMLS_C)); } else if (zend_parse_parameters(1 TSRMLS_CC, "l", &flags) == SUCCESS) { - flags = flags & SMFIF_ADDHDRS|SMFIF_CHGHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT; + flags = flags & (SMFIF_ADDHDRS|SMFIF_CHGHDRS|SMFIF_CHGBODY|SMFIF_ADDRCPT|SMFIF_DELRCPT); smfilter.xxfi_flags = flags; } } @@ -703,7 +708,7 @@ if (MG(state) != MLFI_EOM) { php_error(E_WARNING, NOT_EOM, get_active_function_name(TSRMLS_C)); } else if (zend_parse_parameters(1 TSRMLS_CC, "s", &body, &len) == SUCCESS) { - if (smfi_replacebody(MG(ctx), body, len) == MI_SUCCESS) { + if (smfi_replacebody(MG(ctx), (u_char*)body, len) == MI_SUCCESS) { RETURN_TRUE; } } @@ -732,6 +737,8 @@ MG(state) = MLFI_NONE; MG(initialized) = 0; + return SUCCESS; + } /* }}} */ @@ -920,9 +927,7 @@ /* temporary locals */ int orig_optind=ap_php_optind; char *orig_optarg=ap_php_optarg; - char *arg_free=NULL, **arg_excp=&arg_free; int interactive=0; - char *exec_direct=NULL; char *param_error=NULL; /* end of temporary locals */ @@ -1099,7 +1104,7 @@ openlog("php-milter", LOG_PID, LOG_MAIL); - if (exit_status = mlfi_init()) { + if ((exit_status = mlfi_init())) { syslog(1, "mlfi_init failed."); exit(exit_status); }