diff options
Diffstat (limited to 'Zend/zend_compile.c')
| -rw-r--r-- | Zend/zend_compile.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 01049f4175..e22e3f8e37 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1480,6 +1480,7 @@ static void zend_ensure_valid_class_fetch_type(uint32_t fetch_type) /* {{{ */ static zend_bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *class_ast, zend_ast *name_ast, zend_bool constant) /* {{{ */ { uint32_t fetch_type; + zval *class_name; if (name_ast->kind != ZEND_AST_ZVAL) { return 0; @@ -1494,7 +1495,13 @@ static zend_bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_a "Dynamic class names are not allowed in compile-time ::class fetch"); } - fetch_type = zend_get_class_fetch_type(zend_ast_get_str(class_ast)); + class_name = zend_ast_get_zval(class_ast); + + if (Z_TYPE_P(class_name) != IS_STRING) { + zend_error_noreturn(E_COMPILE_ERROR, "Illegal class name"); + } + + fetch_type = zend_get_class_fetch_type(Z_STR_P(class_name)); zend_ensure_valid_class_fetch_type(fetch_type); switch (fetch_type) { |
