From: David Walker Date: Wed, 6 Jul 2016 12:45:20 +0000 (-0600) Subject: Fix to not attempt to call if handler is long. Idea for this came X-Git-Tag: php-7.1.0beta1~161 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fcda3c8adae29e87b8717c91e2aa073d708e9e84;p=php Fix to not attempt to call if handler is long. Idea for this came from comment on PR. --- diff --git a/ext/pcntl/pcntl.c b/ext/pcntl/pcntl.c index 811f7406ce..67168868b7 100644 --- a/ext/pcntl/pcntl.c +++ b/ext/pcntl/pcntl.c @@ -1392,14 +1392,16 @@ void pcntl_signal_dispatch() while (queue) { if ((handle = zend_hash_index_find(&PCNTL_G(php_signal_table), queue->signo)) != NULL) { - ZVAL_NULL(&retval); - ZVAL_LONG(¶m, 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); - zval_ptr_dtor(¶m); - zval_ptr_dtor(&retval); + if (Z_TYPE_P(handle) != IS_LONG) { + ZVAL_NULL(&retval); + ZVAL_LONG(¶m, 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); + zval_ptr_dtor(¶m); + zval_ptr_dtor(&retval); + } } next = queue->next;