1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

JIT: Fixed memory leak

This commit is contained in:
Dmitry Stogov
2021-10-20 10:38:47 +03:00
parent 23a607574e
commit 38626dbaad
2 changed files with 22 additions and 1 deletions

View File

@@ -5364,6 +5364,7 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
if (op2_info & MAY_BE_LONG) {
zend_bool op2_loaded = 0;
zend_bool packed_loaded = 0;
zend_bool bad_packed_key = 0;
if (op2_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - MAY_BE_LONG)) {
| // if (EXPECTED(Z_TYPE_P(dim) == IS_LONG))
@@ -5396,6 +5397,8 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
val = Z_LVAL_P(Z_ZV(op2_addr));
if (val >= 0 && val < HT_MAX_SIZE) {
packed_loaded = 1;
} else {
bad_packed_key = 1;
}
} else {
if (!op2_loaded) {
@@ -5594,7 +5597,7 @@ static int zend_jit_fetch_dimension_address_inner(dasm_State **Dst, const zend_o
if (packed_loaded) {
| IF_NOT_Z_TYPE r0, IS_UNDEF, >8
}
if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || packed_loaded) {
if (!(op1_info & MAY_BE_ARRAY_KEY_LONG) || packed_loaded || bad_packed_key) {
|2:
| //retval = zend_hash_index_add_new(ht, hval, &EG(uninitialized_zval));
if (!op2_loaded) {

View File

@@ -0,0 +1,18 @@
--TEST--
JIT FETCH_DIM_W: 001
--INI--
opcache.enable=1
opcache.enable_cli=1
opcache.file_update_protection=0
opcache.jit_buffer_size=1M
--FILE--
<?php
function &foo() {
$a = array(1);
return $a[-1];
}
var_dump(foo());
?>
--EXPECT--
NULL