diff options
author | Stanislav Malyshev <stas@php.net> | 2001-02-22 10:15:52 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2001-02-22 10:15:52 +0000 |
commit | 4cda96691c58ace48deec55aad22e31297506571 (patch) | |
tree | 406ddc49cca7c099d087c35070bfbe17fd42ba4e /ext/standard | |
parent | 454221ba621aaf163cc642e40ed1a0892b2e2db7 (diff) | |
download | php-git-4cda96691c58ace48deec55aad22e31297506571.tar.gz |
Fix #8992, patch by yasushi_takahashi@tsuken.co.jp
Diffstat (limited to 'ext/standard')
-rw-r--r-- | ext/standard/exec.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/ext/standard/exec.c b/ext/standard/exec.c index ed83321107..438112b922 100644 --- a/ext/standard/exec.c +++ b/ext/standard/exec.c @@ -31,6 +31,9 @@ #if HAVE_SYS_WAIT_H #include <sys/wait.h> #endif +#if HAVE_SIGNAL_H +#include <signal.h> +#endif /* * If type==0, only last line of output is returned (exec) @@ -48,6 +51,7 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) int overflow_limit, lcmd, ldir; int rsrc_id; char *b, *c, *d=NULL; + void (*sig_handler)(); PLS_FETCH(); FLS_FETCH(); @@ -89,6 +93,8 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) tmp = php_escape_shell_cmd(d); efree(d); d = tmp; + + sig_handler = signal (SIGCHLD, SIG_DFL); #ifdef PHP_WIN32 fp = V_POPEN(d, "rb"); #else @@ -98,9 +104,11 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) php_error(E_WARNING, "Unable to fork [%s]", d); efree(d); efree(buf); + signal (SIGCHLD, sig_handler); return -1; } } else { /* not safe_mode */ + sig_handler = signal (SIGCHLD, SIG_DFL); #ifdef PHP_WIN32 fp = V_POPEN(cmd, "rb"); #else @@ -109,6 +117,7 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) if (!fp) { php_error(E_WARNING, "Unable to fork [%s]", cmd); efree(buf); + signal (SIGCHLD, sig_handler); return -1; } } @@ -137,6 +146,7 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) if ( buf == NULL ) { php_error(E_WARNING, "Unable to erealloc %d bytes for exec buffer", buflen + EXEC_INPUT_BUF); + signal (SIGCHLD, sig_handler); return -1; } buflen += EXEC_INPUT_BUF; @@ -203,6 +213,7 @@ int php_Exec(int type, char *cmd, pval *array, pval *return_value) } #endif + signal (SIGCHLD, sig_handler); if (d) { efree(d); } |