From: Dmitry Stogov Date: Mon, 23 Dec 2013 12:53:34 +0000 (+0400) Subject: Fixed bug #66338 (Optimization binding of class constants is not safely opcacheable) X-Git-Tag: php-5.6.0alpha1~96 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a00e7f22d2981c0cf10d957df9b90df83894187f;p=php Fixed bug #66338 (Optimization binding of class constants is not safely opcacheable) --- diff --git a/ext/opcache/Optimizer/pass1_5.c b/ext/opcache/Optimizer/pass1_5.c index 5ab5bf400b..8f76c63d96 100644 --- a/ext/opcache/Optimizer/pass1_5.c +++ b/ext/opcache/Optimizer/pass1_5.c @@ -274,7 +274,11 @@ if (ZEND_OPTIMIZER_PASS_1 & OPTIMIZATION_LEVEL) { Z_STRVAL(op_array->literals[opline->op1.constant + 1].constant), Z_STRLEN(op_array->literals[opline->op1.constant].constant) + 1, Z_HASH_P(&op_array->literals[opline->op1.constant + 1].constant), - (void **)&pce) == FAILURE) { + (void **)&pce) == FAILURE || + ((*pce)->type == ZEND_INTERNAL_CLASS && + (*pce)->info.internal.module->type != MODULE_PERSISTENT) || + ((*pce)->type == ZEND_USER_CLASS && + ZEND_CE_FILENAME(*pce) != op_array->filename)) { break; } } diff --git a/ext/opcache/tests/bug66338.phpt b/ext/opcache/tests/bug66338.phpt new file mode 100644 index 0000000000..cf0018df94 --- /dev/null +++ b/ext/opcache/tests/bug66338.phpt @@ -0,0 +1,42 @@ +--TEST-- +Bug #66338 (Optimization binding of class constants is not safely opcacheable) +--INI-- +opcache.enable=0 +--SKIPIF-- + +--FILE-- + +--EXPECT-- +The President of the USA is Barack Hussein Obama II +The Prime Minister of the UK is David William Donald Cameron