Skip to content

Commit 8286de2

Browse files
committed
Fix type narrowing warning during type inference of ZEND_FETCH_DIM_W
Fixes oss-fuzz #45820
1 parent a74b865 commit 8286de2

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

ext/opcache/Optimizer/zend_inference.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3294,11 +3294,12 @@ static zend_always_inline int _zend_update_type_info(
32943294
ZEND_ASSERT(j < 0 && "There should only be one use");
32953295
}
32963296
}
3297-
if ((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) {
3297+
if (((tmp & MAY_BE_ARRAY) && (tmp & MAY_BE_ARRAY_KEY_ANY)) || opline->opcode == ZEND_FETCH_DIM_FUNC_ARG) {
32983298
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
32993299
} else {
33003300
/* invalid key type */
3301-
tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN)) | (t1 & ~(MAY_BE_RC1|MAY_BE_RCN));
3301+
tmp = (tmp & (MAY_BE_RC1|MAY_BE_RCN|MAY_BE_ARRAY)) |
3302+
(t1 & ~(MAY_BE_RC1|MAY_BE_RCN|MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_FALSE));
33023303
UPDATE_SSA_TYPE(tmp, ssa_op->op1_def);
33033304
}
33043305
COPY_SSA_OBJ_TYPE(ssa_op->op1_use, ssa_op->op1_def);
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
Type inference 004: Type narrowing warning during type inference of ZEND_FETCH_DIM_W
3+
--INI--
4+
opcache.enable=1
5+
opcache.enable_cli=1
6+
opcache.optimization_level=-1
7+
--FILE--
8+
<?php
9+
function y() {
10+
for(;;){
11+
$arr[]->y = c;
12+
$arr = c;
13+
}
14+
}
15+
?>
16+
DONE
17+
--EXPECT--
18+
DONE

0 commit comments

Comments
 (0)