Skip to content

Commit d3063c0

Browse files
committed
Tracing JIT: Fixed memory leak
1 parent e59d0a7 commit d3063c0

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

ext/opcache/jit/zend_jit_x86.dasc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1384,7 +1384,7 @@ static void* dasm_labels[zend_lb_MAX];
13841384
|.macro ZVAL_DTOR_FUNC, var_info, opline // arg1 must be in FCARG1a
13851385
|| do {
13861386
|| if (!((var_info) & MAY_BE_GUARD)
1387-
|| && has_concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_INDIRECT))) {
1387+
|| && has_concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
13881388
|| zend_uchar type = concrete_type((var_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE));
13891389
|| if (type == IS_STRING && !ZEND_DEBUG) {
13901390
| EXT_CALL _efree, r0
@@ -1415,8 +1415,8 @@ static void* dasm_labels[zend_lb_MAX];
14151415
|.endmacro
14161416

14171417
|.macro ZVAL_PTR_DTOR, addr, op_info, gc, cold, opline
1418-
|| if ((op_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
1419-
|| if ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1418+
|| if ((op_info) & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF|MAY_BE_GUARD)) {
1419+
|| if ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
14201420
| // if (Z_REFCOUNTED_P(cv)) {
14211421
|| if (cold) {
14221422
| IF_ZVAL_REFCOUNTED addr, >1
@@ -1429,23 +1429,23 @@ static void* dasm_labels[zend_lb_MAX];
14291429
| // if (!Z_DELREF_P(cv)) {
14301430
| GET_ZVAL_PTR FCARG1a, addr
14311431
| GC_DELREF FCARG1a
1432-
|| if (RC_MAY_BE_1(op_info)) {
1433-
|| if (RC_MAY_BE_N(op_info)) {
1434-
|| if (gc && RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) {
1432+
|| if (((op_info) & MAY_BE_GUARD) || RC_MAY_BE_1(op_info)) {
1433+
|| if (((op_info) & MAY_BE_GUARD) || RC_MAY_BE_N(op_info)) {
1434+
|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) {
14351435
| jnz >3
14361436
|| } else {
14371437
| jnz >4
14381438
|| }
14391439
|| }
14401440
| // zval_dtor_func(r);
14411441
| ZVAL_DTOR_FUNC op_info, opline
1442-
|| if (gc && RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) {
1442+
|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) {
14431443
| jmp >4
14441444
|| }
14451445
|3:
14461446
|| }
1447-
|| if (gc && RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0) {
1448-
|| if ((op_info) & MAY_BE_REF) {
1447+
|| if (gc && (((op_info) & MAY_BE_GUARD) || (RC_MAY_BE_N(op_info) && ((op_info) & (MAY_BE_REF|MAY_BE_ARRAY|MAY_BE_OBJECT)) != 0))) {
1448+
|| if ((op_info) & (MAY_BE_REF|MAY_BE_GUARD)) {
14491449
|| zend_jit_addr ref_addr = ZEND_ADDR_MEM_ZVAL(ZREG_FCARG1a, offsetof(zend_reference, val));
14501450
| IF_NOT_ZVAL_TYPE addr, IS_REFERENCE, >1
14511451
| IF_NOT_ZVAL_COLLECTABLE ref_addr, >4
@@ -1456,7 +1456,7 @@ static void* dasm_labels[zend_lb_MAX];
14561456
| // gc_possible_root(Z_COUNTED_P(z))
14571457
| EXT_CALL gc_possible_root, r0
14581458
|| }
1459-
|| if (cold && ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) {
1459+
|| if (cold && ((op_info) & ((MAY_BE_ANY|MAY_BE_UNDEF|MAY_BE_INDIRECT|MAY_BE_GUARD)-(MAY_BE_OBJECT|MAY_BE_RESOURCE))) != 0) {
14601460
| jmp >4
14611461
|.code
14621462
|| }
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
--TEST--
2+
JIT FETCH_DIM_R: 008
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.file_update_protection=0
7+
opcache.jit_buffer_size=1M
8+
--FILE--
9+
<?php
10+
function &test() { return $x; }
11+
test()[1];
12+
?>
13+
DONE
14+
--EXPECTF--
15+
Warning: Trying to access array offset on value of type null in %sfetch_dim_r_008.php on line 3
16+
DONE

0 commit comments

Comments
 (0)