From 19dfe05f16ce3317fe36e41fa7857de59a771cae Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 1 Nov 2023 09:54:58 +0300 Subject: [PATCH] Fixed inorrect QM_ASSIGN elimination Fixes oss-fuzz #63771 --- Zend/Optimizer/block_pass.c | 1 + ext/opcache/tests/opt/block_pass_006.phpt | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 ext/opcache/tests/opt/block_pass_006.phpt diff --git a/Zend/Optimizer/block_pass.c b/Zend/Optimizer/block_pass.c index 72441c000e6..f0aaeb22935 100644 --- a/Zend/Optimizer/block_pass.c +++ b/Zend/Optimizer/block_pass.c @@ -172,6 +172,7 @@ static void zend_optimize_block(zend_basic_block *block, zend_op_array *op_array && opline->opcode != ZEND_SWITCH_LONG && opline->opcode != ZEND_SWITCH_STRING && opline->opcode != ZEND_MATCH + && opline->opcode != ZEND_MATCH_ERROR && zend_optimizer_update_op1_const(op_array, opline, &c)) { VAR_SOURCE(op1) = NULL; if (opline->opcode != ZEND_JMP_NULL diff --git a/ext/opcache/tests/opt/block_pass_006.phpt b/ext/opcache/tests/opt/block_pass_006.phpt new file mode 100644 index 00000000000..e70689c65ab --- /dev/null +++ b/ext/opcache/tests/opt/block_pass_006.phpt @@ -0,0 +1,15 @@ +--TEST-- +Block Pass 006: Inorrect QM_ASSIGN elimination +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.optimization_level=-1 +--FILE-- +''}){} +?> +--EXPECTF-- +Fatal error: Uncaught Error: Undefined constant "c" in %sblock_pass_006.php:2 +Stack trace: +#0 {main} + thrown in %sblock_pass_006.php on line 2