ID: 44446
User updated by: manuel at mausz dot at
Reported By: manuel at mausz dot at
Status: Open
Bug Type: *General Issues
Operating System: Linux + Windows
PHP Version: 5.2.6RC2
New Comment:
Hello,
sorry, you're right. I overlooked that free at the end.
But then d won't be freed if VCWD_POPEN fails and the code jumps to the
"err"-label.
And no, I don't have a script. I just looked at the safe_mode_exec_dir
code and found that issue.
Previous Comments:
------------------------------------------------------------------------
[2008-03-16 18:07:54] [EMAIL PROTECTED]
Hello, you have a reprocuce script?
I'm not see leak here.
We have:
if (...) {
/* ... */
cmd_p = php_escape_shell_cmd(d);
efree(d);
d = cmd_p;
} else {
cmd_p = cmd;
}
and:
if (d) {
efree(d);
}
Destined to free the escaped cmd.
------------------------------------------------------------------------
[2008-03-16 16:19:59] manuel at mausz dot at
That's the correct patch:
--- php-5.2.5/ext/standard/exec.c.orig 2008-03-16 17:15:28.000000000
+0100
+++ php-5.2.5/ext/standard/exec.c 2008-03-16 17:16:26.000000000
+0100
@@ -87,7 +87,7 @@
efree(d);
d = cmd_p;
} else {
- cmd_p = cmd;
+ cmd_p = estrdup(cmd);
}
#if PHP_SIGCHILD
@@ -99,6 +99,7 @@
#else
fp = VCWD_POPEN(cmd_p, "r");
#endif
+ efree(cmd_p);
if (!fp) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to
fork [%s]", cmd);
goto err;
------------------------------------------------------------------------
[2008-03-16 15:59:13] manuel at mausz dot at
Description:
------------
There's a memory leak in php_exec. The escaped command never gets
freed.
--- ./ext/standard/exec.c.orig 2008-03-16 16:52:08.000000000 +0100
+++ ./ext/standard/exec.c 2008-03-16 16:51:54.000000000 +0100
@@ -116,6 +116,7 @@
#else
fp = VCWD_POPEN(cmd_p, "r");
#endif
+ efree(cmd_p);
if (!fp) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to
fork [%s]", cmd);
goto err;
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=44446&edit=1