Skip to content

Commit b65b15c

Browse files
committed
Mark assert() as INDIRECT_VAR_ACCESS
I don't like this... we may want to detect "obviously not string" operands by checking for the result of a comparison instruction.
1 parent 37b1226 commit b65b15c

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
Misoptimization when variable is modified by assert()
3+
--INI--
4+
zend.assertions=1
5+
--FILE--
6+
<?php
7+
8+
function test() {
9+
$i = 0;
10+
assert('$i = new stdClass');
11+
$i += 1;
12+
var_dump($i);
13+
}
14+
test();
15+
16+
?>
17+
--EXPECTF--
18+
Notice: Object of class stdClass could not be converted to int in %s on line %d
19+
int(2)

ext/opcache/Optimizer/zend_cfg.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,8 @@ int zend_build_cfg(zend_arena **arena, const zend_op_array *op_array, uint32_t b
308308
flags |= ZEND_FUNC_INDIRECT_VAR_ACCESS;
309309
} else if (zend_string_equals_literal(Z_STR_P(zv), "get_defined_vars")) {
310310
flags |= ZEND_FUNC_INDIRECT_VAR_ACCESS;
311+
} else if (zend_string_equals_literal(Z_STR_P(zv), "assert")) {
312+
flags |= ZEND_FUNC_INDIRECT_VAR_ACCESS;
311313
} else if (zend_string_equals_literal(Z_STR_P(zv), "func_num_args")) {
312314
flags |= ZEND_FUNC_VARARG;
313315
} else if (zend_string_equals_literal(Z_STR_P(zv), "func_get_arg")) {

0 commit comments

Comments
 (0)