From 3be92120ba676afdcbd40bafa9d474b7f10e286c Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sun, 5 Jun 2016 22:16:15 +0200 Subject: Fix handling of parse_str() with unpack in optimizer --- Zend/tests/parse_str_with_unpack.phpt | 15 +++++++++++++++ ext/opcache/Optimizer/zend_optimizer.c | 4 ++-- 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 Zend/tests/parse_str_with_unpack.phpt diff --git a/Zend/tests/parse_str_with_unpack.phpt b/Zend/tests/parse_str_with_unpack.phpt new file mode 100644 index 0000000000..50b296d710 --- /dev/null +++ b/Zend/tests/parse_str_with_unpack.phpt @@ -0,0 +1,15 @@ +--TEST-- +Calling parse_str through argument unpacking +--FILE-- + +--EXPECT-- +int(42) diff --git a/ext/opcache/Optimizer/zend_optimizer.c b/ext/opcache/Optimizer/zend_optimizer.c index ea0deb53c8..35dff98362 100644 --- a/ext/opcache/Optimizer/zend_optimizer.c +++ b/ext/opcache/Optimizer/zend_optimizer.c @@ -596,9 +596,9 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args) return ZEND_FUNC_INDIRECT_VAR_ACCESS; } else if (zend_string_equals_literal(name, "compact")) { return ZEND_FUNC_INDIRECT_VAR_ACCESS; - } else if (zend_string_equals_literal(name, "parse_str") && num_args == 1) { + } else if (zend_string_equals_literal(name, "parse_str") && num_args <= 1) { return ZEND_FUNC_INDIRECT_VAR_ACCESS; - } else if (zend_string_equals_literal(name, "mb_parse_str") && num_args == 1) { + } else if (zend_string_equals_literal(name, "mb_parse_str") && num_args <= 1) { return ZEND_FUNC_INDIRECT_VAR_ACCESS; } else if (zend_string_equals_literal(name, "get_defined_vars")) { return ZEND_FUNC_INDIRECT_VAR_ACCESS; -- cgit v1.2.1