From d32d7c1425cc7358edaa8b078ed97d2fd324ffa2 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Wed, 3 Jul 2019 12:49:06 +0200 Subject: add upstream patch for https://bugs.php.net/78230 segfault with opcache enabled --- php-bug78230.patch | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 php-bug78230.patch (limited to 'php-bug78230.patch') diff --git a/php-bug78230.patch b/php-bug78230.patch new file mode 100644 index 0000000..355f8cc --- /dev/null +++ b/php-bug78230.patch @@ -0,0 +1,59 @@ +From 4892bbc167dfa0ea188baebbce538225f4a0455a Mon Sep 17 00:00:00 2001 +From: Nikita Popov +Date: Wed, 3 Jul 2019 10:19:31 +0200 +Subject: [PATCH] Fixed bug #78230 + +--- + NEWS | 8 +++++--- + ext/opcache/Optimizer/sccp.c | 1 + + ext/opcache/tests/bug78230.phpt | 29 +++++++++++++++++++++++++++++ + 3 files changed, 35 insertions(+), 3 deletions(-) + create mode 100644 ext/opcache/tests/bug78230.phpt + +diff --git a/ext/opcache/Optimizer/sccp.c b/ext/opcache/Optimizer/sccp.c +index ac3247076eaa..1ec3a5153241 100644 +--- a/ext/opcache/Optimizer/sccp.c ++++ b/ext/opcache/Optimizer/sccp.c +@@ -2204,6 +2204,7 @@ static int try_remove_definition(sccp_ctx *ctx, int var_num, zend_ssa_var *var, + if (opline->opcode == ZEND_DO_ICALL) { + removed_ops = remove_call(ctx, opline, ssa_op); + } else if (opline->opcode == ZEND_TYPE_CHECK ++ && opline->op1_type & (IS_VAR|IS_TMP_VAR) + && !value_known(&ctx->values[ssa_op->op1_use])) { + /* For TYPE_CHECK we may compute the result value without knowing the + * operand, based on type inference information. Make sure the operand is +diff --git a/ext/opcache/tests/bug78230.phpt b/ext/opcache/tests/bug78230.phpt +new file mode 100644 +index 000000000000..38cc68499517 +--- /dev/null ++++ b/ext/opcache/tests/bug78230.phpt +@@ -0,0 +1,29 @@ ++--TEST-- ++Bug #78230: Incorrect type check optimization ++--FILE-- ++ ++--EXPECT-- ++bool(true) ++array(4) { ++ [0]=> ++ int(1) ++ [1]=> ++ int(2) ++ [2]=> ++ int(3) ++ [3]=> ++ int(4) ++} -- cgit