Skip to content

Commit e5c05bf

Browse files
committed
show an error when deeply nesting classes
1 parent 743c378 commit e5c05bf

File tree

2 files changed

+5
-3
lines changed

2 files changed

+5
-3
lines changed

Zend/zend_compile.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9153,6 +9153,10 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
91539153
if (CG(active_class_entry)) {
91549154
// we have a nested class that needs to be renamed
91559155
// so append the unqualified name to the nested parent name
9156+
// but prevent nesting more than 1 level deep
9157+
if (zend_memnstr(ZSTR_VAL(CG(active_class_entry)->name), "::", sizeof("::") - 1, ZSTR_VAL(CG(active_class_entry)->name) + ZSTR_LEN(CG(active_class_entry)->name))) {
9158+
zend_error_noreturn(E_COMPILE_ERROR, "Cannot nest classes more than 1 level deep");
9159+
}
91569160
name = zend_string_concat3(
91579161
ZSTR_VAL(CG(active_class_entry)->name), ZSTR_LEN(CG(active_class_entry)->name),
91589162
"::", 2,

tests/classes/inner_class_006.phpt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ class A {
88
public class C {}
99
}
1010
}
11-
12-
var_dump(new A::B::C());
1311
?>
1412
--EXPECTF--
15-
Parse error: syntax error, unexpected identifier "C", expecting variable or "$" in %s on line %d
13+
Fatal error: Cannot nest classes more than 1 level deep in %s on line %d

0 commit comments

Comments
 (0)