Skip to content

Commit 768bc7a

Browse files
committed
Merge branch 'PHP-7.3'
2 parents b93aefc + ab3c94a commit 768bc7a

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

Zend/tests/bug77530.phpt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
--TEST--
2+
Bug #77530: PHP crashes when parsing '(2)::class'
3+
--FILE--
4+
<?php
5+
6+
echo (2)::class;
7+
8+
?>
9+
--EXPECTF--
10+
Fatal error: Illegal class name in %s on line %d

Zend/zend_compile.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1334,12 +1334,19 @@ static void zend_ensure_valid_class_fetch_type(uint32_t fetch_type) /* {{{ */
13341334
static zend_bool zend_try_compile_const_expr_resolve_class_name(zval *zv, zend_ast *class_ast) /* {{{ */
13351335
{
13361336
uint32_t fetch_type;
1337+
zval *class_name;
13371338

13381339
if (class_ast->kind != ZEND_AST_ZVAL) {
13391340
zend_error_noreturn(E_COMPILE_ERROR, "Cannot use ::class with dynamic class name");
13401341
}
13411342

1342-
fetch_type = zend_get_class_fetch_type(zend_ast_get_str(class_ast));
1343+
class_name = zend_ast_get_zval(class_ast);
1344+
1345+
if (Z_TYPE_P(class_name) != IS_STRING) {
1346+
zend_error_noreturn(E_COMPILE_ERROR, "Illegal class name");
1347+
}
1348+
1349+
fetch_type = zend_get_class_fetch_type(Z_STR_P(class_name));
13431350
zend_ensure_valid_class_fetch_type(fetch_type);
13441351

13451352
switch (fetch_type) {

0 commit comments

Comments
 (0)