]> granicus.if.org Git - php/commitdiff
Fixed crash and improved signal validation
authorIlia Alshanetsky <iliaa@php.net>
Fri, 3 Jun 2011 17:18:46 +0000 (17:18 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Fri, 3 Jun 2011 17:18:46 +0000 (17:18 +0000)
ext/pcntl/pcntl.c
ext/pcntl/tests/pcntl_signal.phpt

index d07b9ea047b0ead234708618aa853d8768603d32..d2a9130230f9d4888cc0cba385b87bf543d021aa 100755 (executable)
@@ -849,6 +849,11 @@ PHP_FUNCTION(pcntl_signal)
                return;
        }
 
+       if (signo < 1 || signo > 32) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid signal");
+               RETURN_FALSE;
+       }
+
        if (!PCNTL_G(spares)) {
                /* since calling malloc() from within a signal handler is not portable,
                 * pre-allocate a few records for recording signals */
@@ -863,9 +868,10 @@ PHP_FUNCTION(pcntl_signal)
        }
 
        /* Special long value case for SIG_DFL and SIG_IGN */
-       if (Z_TYPE_P(handle)==IS_LONG) {
-               if (Z_LVAL_P(handle)!= (long) SIG_DFL && Z_LVAL_P(handle) != (long) SIG_IGN) {
+       if (Z_TYPE_P(handle) == IS_LONG) {
+               if (Z_LVAL_P(handle) != (long) SIG_DFL && Z_LVAL_P(handle) != (long) SIG_IGN) {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for handle argument specified");
+                       RETURN_FALSE;
                }
                if (php_signal(signo, (Sigfunc *) Z_LVAL_P(handle), (int) restart_syscalls) == SIG_ERR) {
                        PCNTL_G(last_error) = errno;
index 977f26fbcc2f5252002131f49c2210f986b9effc..efd4bba953e00d529f50f1e645b554d772912a0b 100644 (file)
@@ -28,12 +28,10 @@ Warning: pcntl_signal() expects at least 2 parameters, 0 given in %s
 NULL
 bool(true)
 
-Warning: pcntl_signal(): Invalid value for handle argument specified in %s
-
-Warning: pcntl_signal(): Error assigning signal %s
+Warning: pcntl_signal(): Invalid signal %s
 bool(false)
 
-Warning: pcntl_signal(): Error assigning signal %s
+Warning: pcntl_signal(): Invalid signal %s
 bool(false)
 
 Warning: pcntl_signal(): not callable is not a callable function name error in %s