Skip to content

Commit

Permalink
Merge branch 'PHP-8.4'
Browse files Browse the repository at this point in the history
* PHP-8.4:
  Fix stack overflow detection for variable compilation
  • Loading branch information
iluuu1994 committed Jan 29, 2025
2 parents 0537968 + 4f91af3 commit fa7c67d
Show file tree
Hide file tree
Showing 2 changed files with 75 additions and 0 deletions.
71 changes: 71 additions & 0 deletions Zend/tests/stack_limit/stack_limit_015.phpt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
--TEST--
Stack limit 015 - Internal stack limit check in zend_compile_var()
--CREDITS--
abdullahasif88
--SKIPIF--
<?php
if (!function_exists('zend_test_zend_call_stack_get')) die("skip zend_test_zend_call_stack_get() is not available");
?>
--EXTENSIONS--
zend_test
--INI--
zend.max_allowed_stack_size=128K
--FILE--
<?php

$test
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
->p->p->p->p->p->p->p->p->p->p
;

?>
--EXPECTF--
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
4 changes: 4 additions & 0 deletions Zend/zend_compile.c
Original file line number Diff line number Diff line change
Expand Up @@ -11677,6 +11677,8 @@ static zend_op *zend_compile_var_inner(znode *result, zend_ast *ast, uint32_t ty

static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */
{
zend_check_stack_limit();

uint32_t checkpoint = zend_short_circuiting_checkpoint();
zend_op *opcode = zend_compile_var_inner(result, ast, type, by_ref);
zend_short_circuiting_commit(checkpoint, result, ast);
Expand All @@ -11685,6 +11687,8 @@ static zend_op *zend_compile_var(znode *result, zend_ast *ast, uint32_t type, bo

static zend_op *zend_delayed_compile_var(znode *result, zend_ast *ast, uint32_t type, bool by_ref) /* {{{ */
{
zend_check_stack_limit();

switch (ast->kind) {
case ZEND_AST_VAR:
return zend_compile_simple_var(result, ast, type, 1);
Expand Down

0 comments on commit fa7c67d

Please sign in to comment.