From: Dmitry Stogov Date: Mon, 11 Jul 2011 07:10:30 +0000 (+0000) Subject: Fixed bug #55150 (php -a segfaults) X-Git-Tag: php-5.4.0alpha2~26 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f214fd4f7db216a9c97b32dbf4427f6c5b8a640d;p=php Fixed bug #55150 (php -a segfaults) --- diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index dc8c5c8ae3..89d790e7e1 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -70,6 +70,10 @@ #define GET_CACHE_SLOT(literal) do { \ CG(active_op_array)->literals[literal].cache_slot = CG(active_op_array)->last_cache_slot++; \ + if ((CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE) && CG(active_op_array)->run_time_cache) { \ + CG(active_op_array)->run_time_cache = erealloc(CG(active_op_array)->run_time_cache, CG(active_op_array)->last_cache_slot * sizeof(void*)); \ + CG(active_op_array)->run_time_cache[CG(active_op_array)->last_cache_slot - 1] = NULL; \ + } \ } while (0) #define POLYMORPHIC_CACHE_SLOT_SIZE 2 @@ -77,6 +81,11 @@ #define GET_POLYMORPHIC_CACHE_SLOT(literal) do { \ CG(active_op_array)->literals[literal].cache_slot = CG(active_op_array)->last_cache_slot; \ CG(active_op_array)->last_cache_slot += POLYMORPHIC_CACHE_SLOT_SIZE; \ + if ((CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE) && CG(active_op_array)->run_time_cache) { \ + CG(active_op_array)->run_time_cache = erealloc(CG(active_op_array)->run_time_cache, CG(active_op_array)->last_cache_slot * sizeof(void*)); \ + CG(active_op_array)->run_time_cache[CG(active_op_array)->last_cache_slot - 1] = NULL; \ + CG(active_op_array)->run_time_cache[CG(active_op_array)->last_cache_slot - 2] = NULL; \ + } \ } while (0) #define FREE_POLYMORPHIC_CACHE_SLOT(literal) do { \