diff options
author | Dmitry Stogov <dmitry@zend.com> | 2017-10-04 16:40:03 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2017-10-04 16:40:03 +0300 |
commit | 2cbc75ec63dbe9aed6b8480444b4f73693da1bd1 (patch) | |
tree | 8c8901a15ca650eb689cdaca663d6ac74378ffff | |
parent | e7afdb0668ef9001ed276e5dd5879e06746d42e3 (diff) | |
parent | e9426cf8161efb8d15082391b6483539a3fdab31 (diff) | |
download | php-git-2cbc75ec63dbe9aed6b8480444b4f73693da1bd1.tar.gz |
Merge branch 'PHP-7.2'
* PHP-7.2:
Fixed rarely possible use-after-free
-rw-r--r-- | ext/opcache/Optimizer/zend_optimizer.c | 13 |
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 |