diff options
author | Nikita Popov <nikic@php.net> | 2015-12-30 23:36:03 +0100 |
---|---|---|
committer | Nikita Popov <nikic@php.net> | 2015-12-30 23:38:03 +0100 |
commit | 83c4417330c4bcb61ce1a9175ddad51c7353b5c9 (patch) | |
tree | 725292ec7e94dbe03e2d6e971a9967a805769b9f /ext | |
parent | 65cabad20d65183b745be9ca797fdbdf7aaa31c5 (diff) | |
download | php-git-83c4417330c4bcb61ce1a9175ddad51c7353b5c9.tar.gz |
Mark uses of scope functions in namespaces as TOO_DYNAMIC
Of course they are not necessarily, but it's very likely and we have
to be conservative anyway.
Also use zend_string_equals_literal().
Diffstat (limited to 'ext')
-rw-r--r-- | ext/opcache/Optimizer/zend_cfg.c | 29 |
1 files changed, 13 insertions, 16 deletions
diff --git a/ext/opcache/Optimizer/zend_cfg.c b/ext/opcache/Optimizer/zend_cfg.c index 9ada8df1a0..920c96f007 100644 --- a/ext/opcache/Optimizer/zend_cfg.c +++ b/ext/opcache/Optimizer/zend_cfg.c @@ -287,32 +287,29 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b flags |= ZEND_FUNC_HAS_CALLS; break; case ZEND_INIT_FCALL: + case ZEND_INIT_NS_FCALL_BY_NAME: zv = CRT_CONSTANT(opline->op2); + if (opline->opcode == ZEND_INIT_NS_FCALL_BY_NAME) { + /* The third literal is the lowercased unqualified name */ + zv += 2; + } if ((fn = zend_hash_find_ptr(EG(function_table), Z_STR_P(zv))) != NULL) { if (fn->type == ZEND_INTERNAL_FUNCTION) { - if (Z_STRLEN_P(zv) == sizeof("extract")-1 && - memcmp(Z_STRVAL_P(zv), "extract", sizeof("extract")-1) == 0) { + if (zend_string_equals_literal(Z_STR_P(zv), "extract")) { flags |= ZEND_FUNC_TOO_DYNAMIC; - } else if (Z_STRLEN_P(zv) == sizeof("compact")-1 && - memcmp(Z_STRVAL_P(zv), "compact", sizeof("compact")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "compact")) { flags |= ZEND_FUNC_TOO_DYNAMIC; - } else if (Z_STRLEN_P(zv) == sizeof("parse_str")-1 && - memcmp(Z_STRVAL_P(zv), "parse_str", sizeof("parse_str")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "parse_str")) { flags |= ZEND_FUNC_TOO_DYNAMIC; - } else if (Z_STRLEN_P(zv) == sizeof("mb_parse_str")-1 && - memcmp(Z_STRVAL_P(zv), "mb_parse_str", sizeof("mb_parse_str")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "mb_parse_str")) { flags |= ZEND_FUNC_TOO_DYNAMIC; - } else if (Z_STRLEN_P(zv) == sizeof("get_defined_vars")-1 && - memcmp(Z_STRVAL_P(zv), "get_defined_vars", sizeof("get_defined_vars")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "get_defined_vars")) { flags |= ZEND_FUNC_TOO_DYNAMIC; - } else if (Z_STRLEN_P(zv) == sizeof("func_num_args")-1 && - memcmp(Z_STRVAL_P(zv), "func_num_args", sizeof("func_num_args")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "func_num_args")) { flags |= ZEND_FUNC_VARARG; - } else if (Z_STRLEN_P(zv) == sizeof("func_get_arg")-1 && - memcmp(Z_STRVAL_P(zv), "func_get_arg", sizeof("func_get_arg")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "func_get_arg")) { flags |= ZEND_FUNC_VARARG; - } else if (Z_STRLEN_P(zv) == sizeof("func_get_args")-1 && - memcmp(Z_STRVAL_P(zv), "func_get_args", sizeof("func_get_args")-1) == 0) { + } else if (zend_string_equals_literal(Z_STR_P(zv), "func_get_args")) { flags |= ZEND_FUNC_VARARG; } } |