1
0
mirror of https://github.com/php/php-src.git synced 2026-04-18 21:41:22 +02:00

Merge branch 'PHP-8.1'

* PHP-8.1:
  JIT: Fixed incorrect assignment of undefined variable
This commit is contained in:
Dmitry Stogov
2021-09-17 18:43:23 +03:00
3 changed files with 20 additions and 3 deletions

View File

@@ -5567,7 +5567,12 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
if (Z_REG(var_addr) != ZREG_FP) {
| ldr Rx(Z_REG(var_addr)), T1 // restore
}
| b >1
if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) {
| LOAD_ZVAL_ADDR FCARG1x, var_addr
}
| LOAD_ADDR_ZTS FCARG2x, executor_globals, uninitialized_zval
| bl ->assign_const
| b >9
|.code
|1:
}
@@ -5599,6 +5604,9 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
} else {
| bl ->assign_cv
}
if ((val_info & MAY_BE_UNDEF) && JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) {
|9:
}
} else {
ZEND_UNREACHABLE();
}

View File

@@ -6042,9 +6042,13 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
if (Z_REG(var_addr) != ZREG_FP) {
| mov Ra(Z_REG(var_addr)), aword T1 // restore
}
| jmp >1
if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) {
| LOAD_ZVAL_ADDR FCARG1a, var_addr
}
| LOAD_ADDR_ZTS FCARG2a, executor_globals, uninitialized_zval
| call ->assign_const
| jmp >9
|.code
|1:
}
}
if (Z_MODE(var_addr) != IS_MEM_ZVAL || Z_REG(var_addr) != ZREG_FCARG1 || Z_OFFSET(var_addr) != 0) {
@@ -6074,6 +6078,9 @@ static int zend_jit_assign_to_variable_call(dasm_State **Dst,
} else {
| call ->assign_cv
}
if ((val_info & MAY_BE_UNDEF) && JIT_G(trigger) != ZEND_JIT_ON_HOT_TRACE) {
|9:
}
} else {
ZEND_UNREACHABLE();
}

View File

@@ -14,10 +14,12 @@ class Test {
function test() {
$o = new Test;
$o->prop = $undef;
var_dump($o->prop);
}
test();
?>
DONE
--EXPECTF--
Warning: Undefined variable $undef in %sassign_obj_002.php on line 7
NULL
DONE