mirror of
https://github.com/php/php-src.git
synced 2025-08-16 22:18:50 +02:00
Undef result if undef dim warning promoted to exception
Fixes oss-fuzz #39278.
This commit is contained in:
parent
f381079398
commit
fe1633f010
2 changed files with 40 additions and 0 deletions
|
@ -684,6 +684,7 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_rw_helper(zend_array *ht, zval *di
|
||||||
goto str_index;
|
goto str_index;
|
||||||
case IS_UNDEF:
|
case IS_UNDEF:
|
||||||
if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) {
|
if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) {
|
||||||
|
undef_result_after_exception();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/* break missing intentionally */
|
/* break missing intentionally */
|
||||||
|
@ -768,6 +769,7 @@ static zval* ZEND_FASTCALL zend_jit_fetch_dim_w_helper(zend_array *ht, zval *dim
|
||||||
goto str_index;
|
goto str_index;
|
||||||
case IS_UNDEF:
|
case IS_UNDEF:
|
||||||
if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) {
|
if (!zend_jit_undefined_op_helper_write(ht, EG(current_execute_data)->opline->op2.var)) {
|
||||||
|
undef_result_after_exception();
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
/* break missing intentionally */
|
/* break missing intentionally */
|
||||||
|
|
38
ext/opcache/tests/jit/assign_dim_undef_exception.phpt
Normal file
38
ext/opcache/tests/jit/assign_dim_undef_exception.phpt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
--TEST--
|
||||||
|
Undef to exception for assign dim offset
|
||||||
|
--INI--
|
||||||
|
opcache.enable=1
|
||||||
|
opcache.enable_cli=1
|
||||||
|
opcache.file_update_protection=0
|
||||||
|
opcache.jit_buffer_size=1M
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
set_error_handler(function($_, $m){
|
||||||
|
throw new Exception($m);
|
||||||
|
});
|
||||||
|
function test1() {
|
||||||
|
$a = [];
|
||||||
|
$res = $a[$undef] = null;
|
||||||
|
}
|
||||||
|
function test2() {
|
||||||
|
$a = [];
|
||||||
|
$res = $a[$undef] += 1;
|
||||||
|
}
|
||||||
|
function test3() {
|
||||||
|
$a = [];
|
||||||
|
$res = isset($a[$undef]);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
test1();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
test2();
|
||||||
|
} catch (Exception $e) {
|
||||||
|
echo $e->getMessage(), "\n";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
Undefined variable $undef
|
||||||
|
Undefined variable $undef
|
Loading…
Add table
Add a link
Reference in a new issue