From a00e7f22d2981c0cf10d957df9b90df83894187f Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 23 Dec 2013 16:53:34 +0400 Subject: [PATCH] Fixed bug #66338 (Optimization binding of class constants is not safely opcacheable) --- ext/opcache/Optimizer/pass1_5.c | 6 ++++- ext/opcache/tests/bug66338.phpt | 42 +++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 ext/opcache/tests/bug66338.phpt 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 -- 2.50.1