Skip to content

Commit fa7c67d

Browse files
committed
Merge branch 'PHP-8.4'
* PHP-8.4: Fix stack overflow detection for variable compilation
2 parents 0537968 + 4f91af3 commit fa7c67d

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
--TEST--
2+
Stack limit 015 - Internal stack limit check in zend_compile_var()
3+
--CREDITS--
4+
abdullahasif88
5+
--SKIPIF--
6+
<?php
7+
if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_call_stack_get() is not available");
8+
?>
9+
--EXTENSIONS--
10+
zend_test
11+
--INI--
12+
zend.max_allowed_stack_size=128K
13+
--FILE--
14+
<?php
15+
16+
$test
17+
->p->p->p->p->p->p->p->p->p->p
18+
->p->p->p->p->p->p->p->p->p->p
19+
->p->p->p->p->p->p->p->p->p->p
20+
->p->p->p->p->p->p->p->p->p->p
21+
->p->p->p->p->p->p->p->p->p->p
22+
->p->p->p->p->p->p->p->p->p->p
23+
->p->p->p->p->p->p->p->p->p->p
24+
->p->p->p->p->p->p->p->p->p->p
25+
->p->p->p->p->p->p->p->p->p->p
26+
->p->p->p->p->p->p->p->p->p->p
27+
->p->p->p->p->p->p->p->p->p->p
28+
->p->p->p->p->p->p->p->p->p->p
29+
->p->p->p->p->p->p->p->p->p->p
30+
->p->p->p->p->p->p->p->p->p->p
31+
->p->p->p->p->p->p->p->p->p->p
32+
->p->p->p->p->p->p->p->p->p->p
33+
->p->p->p->p->p->p->p->p->p->p
34+
->p->p->p->p->p->p->p->p->p->p
35+
->p->p->p->p->p->p->p->p->p->p
36+
->p->p->p->p->p->p->p->p->p->p
37+
->p->p->p->p->p->p->p->p->p->p
38+
->p->p->p->p->p->p->p->p->p->p
39+
->p->p->p->p->p->p->p->p->p->p
40+
->p->p->p->p->p->p->p->p->p->p
41+
->p->p->p->p->p->p->p->p->p->p
42+
->p->p->p->p->p->p->p->p->p->p
43+
->p->p->p->p->p->p->p->p->p->p
44+
->p->p->p->p->p->p->p->p->p->p
45+
->p->p->p->p->p->p->p->p->p->p
46+
->p->p->p->p->p->p->p->p->p->p
47+
->p->p->p->p->p->p->p->p->p->p
48+
->p->p->p->p->p->p->p->p->p->p
49+
->p->p->p->p->p->p->p->p->p->p
50+
->p->p->p->p->p->p->p->p->p->p
51+
->p->p->p->p->p->p->p->p->p->p
52+
->p->p->p->p->p->p->p->p->p->p
53+
->p->p->p->p->p->p->p->p->p->p
54+
->p->p->p->p->p->p->p->p->p->p
55+
->p->p->p->p->p->p->p->p->p->p
56+
->p->p->p->p->p->p->p->p->p->p
57+
->p->p->p->p->p->p->p->p->p->p
58+
->p->p->p->p->p->p->p->p->p->p
59+
->p->p->p->p->p->p->p->p->p->p
60+
->p->p->p->p->p->p->p->p->p->p
61+
->p->p->p->p->p->p->p->p->p->p
62+
->p->p->p->p->p->p->p->p->p->p
63+
->p->p->p->p->p->p->p->p->p->p
64+
->p->p->p->p->p->p->p->p->p->p
65+
->p->p->p->p->p->p->p->p->p->p
66+
->p->p->p->p->p->p->p->p->p->p
67+
;
68+
69+
?>
70+
--EXPECTF--
71+
Fatal error: Maximum call stack size of %d bytes (zend.max_allowed_stack_size - zend.reserved_stack_size) reached during compilation. Try splitting expression in %s on line %d

Zend/zend_compile.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11677,6 +11677,8 @@ static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uint32_t ty
1167711677

1167811678
static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */
1167911679
{
11680+
zend_check_stack_limit();
11681+
1168011682
uint32_t checkpoint = zend_short_circuiting_checkpoint();
1168111683
zend_op *opcode = zend_compile_var_inner(result, ast, type, by_ref);
1168211684
zend_short_circuiting_commit(checkpoint, result, ast);
@@ -11685,6 +11687,8 @@ static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bo
1168511687

1168611688
static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */
1168711689
{
11690+
zend_check_stack_limit();
11691+
1168811692
switch (ast->kind) {
1168911693
case ZEND_AST_VAR:
1169011694
return zend_compile_simple_var(result, ast, type, 1);

0 commit comments

Comments
 (0)