From 1c4f22755392022572fb505884f144181e38d7e5 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 4 Jan 2012 08:25:06 +0000 Subject: [PATCH] Fixed bug #60627 (httpd.worker segfault on startup with php_value) --- NEWS | 2 ++ Zend/zend.h | 4 ++-- Zend/zend_signal.h | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index bac27a4777..52d0e309b0 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,8 @@ PHP NEWS . Fixed bug #60613 (Segmentation fault with $cls->{expr}() syntax). (Dmitry) . Fixed bug #60611 (Segmentation fault with Cls::{expr}() syntax). (Laruence) . Fixed bug #55871 (Interruption in substr_replace()). (Stas) + . Fixed bug #60627 (httpd.worker segfault on startup with php_value). + (Laruence) - SAPI: . Fixed bug #55500 (Corrupted $_FILES indices lead to security concern). diff --git a/Zend/zend.h b/Zend/zend.h index 151cbc1d54..e8bd10725e 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -709,8 +709,8 @@ END_EXTERN_C() #else #include "zend_signal.h" -#define HANDLE_BLOCK_INTERRUPTIONS() SIGG(depth)++; -#define HANDLE_UNBLOCK_INTERRUPTIONS() if (UNEXPECTED((--SIGG(depth))==SIGG(blocked))) { zend_signal_handler_unblock(TSRMLS_C); } +#define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() +#define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() #endif BEGIN_EXTERN_C() diff --git a/Zend/zend_signal.h b/Zend/zend_signal.h index 54f47ee54f..02d6495437 100644 --- a/Zend/zend_signal.h +++ b/Zend/zend_signal.h @@ -69,9 +69,13 @@ typedef struct _zend_signal_globals_t { BEGIN_EXTERN_C() ZEND_API extern int zend_signal_globals_id; END_EXTERN_C() +# define ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; } +# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED((--SIGG(depth))==SIGG(blocked))) { zend_signal_handler_unblock(TSRMLS_C); } #else /* ZTS */ # define SIGG(v) (zend_signal_globals.v) extern ZEND_API zend_signal_globals_t zend_signal_globals; +# define ZEND_SIGNAL_BLOCK_INTERRUPUTIONS() SIGG(depth)++; +# define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (UNEXPECTED((--SIGG(depth))==SIGG(blocked))) { zend_signal_handler_unblock(TSRMLS_C); } #endif /* not ZTS */ # define SIGNAL_BEGIN_CRITICAL() sigset_t oldmask; \ -- 2.40.0