int overflow_limit, lcmd, ldir;
int rsrc_id;
char *b, *c, *d=NULL;
+#if PHP_SIGCHILD
void (*sig_handler)();
+#endif
PLS_FETCH();
FLS_FETCH();
tmp = php_escape_shell_cmd(d);
efree(d);
d = tmp;
-
+#if PHP_SIGCHILD
sig_handler = signal (SIGCHLD, SIG_DFL);
+#endif
#ifdef PHP_WIN32
fp = V_POPEN(d, "rb");
#else
php_error(E_WARNING, "Unable to fork [%s]", d);
efree(d);
efree(buf);
+#if PHP_SIGCHILD
signal (SIGCHLD, sig_handler);
+#endif
return -1;
}
} else { /* not safe_mode */
+#if PHP_SIGCHILD
sig_handler = signal (SIGCHLD, SIG_DFL);
+#endif
#ifdef PHP_WIN32
fp = V_POPEN(cmd, "rb");
#else
if (!fp) {
php_error(E_WARNING, "Unable to fork [%s]", cmd);
efree(buf);
+#if PHP_SIGCHILD
signal (SIGCHLD, sig_handler);
+#endif
return -1;
}
}
if ( buf == NULL ) {
php_error(E_WARNING, "Unable to erealloc %d bytes for exec buffer",
buflen + EXEC_INPUT_BUF);
+#if PHP_SIGCHILD
signal (SIGCHLD, sig_handler);
+#endif
return -1;
}
buflen += EXEC_INPUT_BUF;
FG(pclose_ret) = WEXITSTATUS(FG(pclose_ret));
}
#endif
-
+#if PHP_SIGCHILD
signal (SIGCHLD, sig_handler);
+#endif
if (d) {
efree(d);
}