From: Michael Wallner Date: Tue, 30 May 2006 17:44:23 +0000 (+0000) Subject: MFB: fix bug 37635 (argument to pcntl signal handler is trashed) X-Git-Tag: BEFORE_NEW_OUTPUT_API~31 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d96300f0e278d6f22063f4d35e97c0760b4032d4;p=php MFB: fix bug 37635 (argument to pcntl signal handler is trashed) --- diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index 1eda2316c4..05e93a6bb9 100755 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -693,16 +693,19 @@ void pcntl_tick_handler() PCNTL_G(head) = NULL; /* simple stores are atomic */ /* Allocate */ - MAKE_STD_ZVAL(param); - MAKE_STD_ZVAL(retval); while (queue) { if (zend_hash_index_find(&PCNTL_G(php_signal_table), queue->signo, (void **) &handle)==SUCCESS) { + MAKE_STD_ZVAL(retval); + MAKE_STD_ZVAL(param); + ZVAL_NULL(retval); ZVAL_LONG(param, queue->signo); /* Call php signal handler - Note that we do not report errors, and we ignore the return value */ /* FIXME: this is probably broken when multiple signals are handled in this while loop (retval) */ call_user_function(EG(function_table), NULL, *handle, retval, 1, ¶m TSRMLS_CC); + zval_ptr_dtor(¶m); + zval_ptr_dtor(&retval); } next = queue->next; @@ -713,10 +716,6 @@ void pcntl_tick_handler() /* Re-enable queue */ PCNTL_G(processing_signal_queue) = 0; - - /* Clean up */ - efree(param); - efree(retval); }