From fcda3c8adae29e87b8717c91e2aa073d708e9e84 Mon Sep 17 00:00:00 2001 From: David Walker Date: Wed, 6 Jul 2016 06:45:20 -0600 Subject: Fix to not attempt to call if handler is long. Idea for this came from comment on PR. --- ext/pcntl/pcntl.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'ext/pcntl') 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; -- cgit v1.2.1