summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-10-04 16:39:47 +0300
committerDmitry Stogov <dmitry@zend.com>2017-10-04 16:39:47 +0300
commite9426cf8161efb8d15082391b6483539a3fdab31 (patch)
tree13a7a939f440ae21eced69e576d46b2125b07998
parentc3bb81d5a467174540017d9e4577e58285017403 (diff)
parentb6e34eaf04c5fc692f7c1aff77647f4961c99748 (diff)
downloadphp-git-e9426cf8161efb8d15082391b6483539a3fdab31.tar.gz
Merge branch 'PHP-7.1' into PHP-7.2
* PHP-7.1: Fixed rarely possible use-after-free
-rw-r--r--ext/opcache/Optimizer/zend_optimizer.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c
index 1fc81e1c3a..f55aa41428 100644
--- a/ext/opcache/Optimizer/zend_optimizer.c
+++ b/ext/opcache/Optimizer/zend_optimizer.c
@@ -1307,6 +1307,19 @@ int zend_optimize_script(zend_script *script, zend_long optimization_level, zend
ZEND_SET_FUNC_INFO(call_graph.op_arrays[i], NULL);
}
+ ZEND_HASH_FOREACH_PTR(&script->class_table, ce) {
+ ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->function_table, name, op_array) {
+ if (op_array->scope != ce) {
+ zend_op_array *orig_op_array;
+ if ((orig_op_array = zend_hash_find_ptr(&op_array->scope->function_table, name)) != NULL) {
+ HashTable *ht = op_array->static_variables;
+ *op_array = *orig_op_array;
+ op_array->static_variables = ht;
+ }
+ }
+ } ZEND_HASH_FOREACH_END();
+ } ZEND_HASH_FOREACH_END();
+
zend_arena_release(&ctx.arena, checkpoint);
} else
#endif