Skip to content

Commit c67f6f4

Browse files
committedDec 18, 2023
Fixed incorrect elimination of refcounted check in JIT for BIND_GLOBAL
Fixes oss-fuzz #65135
1 parent 2553ffe commit c67f6f4

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed
 

‎ext/opcache/jit/zend_jit_arm64.dasc

+3-3
Original file line numberDiff line numberDiff line change
@@ -11766,7 +11766,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1176611766
| GC_ADDREF REG0, TMP1w
1176711767
|1:
1176811768
if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
11769-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11769+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1177011770
| // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr)))
1177111771
| IF_ZVAL_REFCOUNTED op1_addr, >2, ZREG_TMP1, ZREG_TMP2
1177211772
|.cold_code
@@ -11793,12 +11793,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1179311793
| EXT_CALL gc_possible_root, REG0
1179411794
| b >5
1179511795
}
11796-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11796+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1179711797
|.code
1179811798
}
1179911799
}
1180011800

11801-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
11801+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1180211802
| // ZVAL_REF(variable_ptr, ref)
1180311803
| SET_ZVAL_PTR op1_addr, REG0, TMP1
1180411804
| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX, TMP1w, TMP2

‎ext/opcache/jit/zend_jit_x86.dasc

+3-3
Original file line numberDiff line numberDiff line change
@@ -12522,7 +12522,7 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1252212522
| GC_ADDREF r0
1252312523
|1:
1252412524
if (op1_info & (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF)) {
12525-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12525+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1252612526
| // if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr)))
1252712527
| IF_ZVAL_REFCOUNTED op1_addr, >2
1252812528
|.cold_code
@@ -12549,12 +12549,12 @@ static int zend_jit_bind_global(dasm_State **Dst, const zend_op *opline, uint32_
1254912549
| EXT_CALL gc_possible_root, r1
1255012550
| jmp >5
1255112551
}
12552-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12552+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1255312553
|.code
1255412554
}
1255512555
}
1255612556

12557-
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
12557+
if (op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF) - (MAY_BE_OBJECT|MAY_BE_RESOURCE))) {
1255812558
| // ZVAL_REF(variable_ptr, ref)
1255912559
| SET_ZVAL_PTR op1_addr, r0
1256012560
| SET_ZVAL_TYPE_INFO op1_addr, IS_REFERENCE_EX
+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
--TEST--
2+
Bind global and immutable string
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 foo($a = '') {
11+
global $a;
12+
}
13+
foo();
14+
var_dump($a);
15+
?>
16+
--EXPECT--
17+
NULL

0 commit comments

Comments
 (0)
Please sign in to comment.