From 5fa6dcd972e868fd6177b6620b44734d55eceab3 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 7 Nov 2019 11:15:29 +0100 Subject: Fixed bug #78759 Handle INDIRECT values in array. --- NEWS | 2 ++ ext/standard/array.c | 8 ++++---- ext/standard/tests/array/bug78759.phpt | 15 +++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 ext/standard/tests/array/bug78759.phpt diff --git a/NEWS b/NEWS index 32b9837579..3160a9fdaa 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| ?? ??? 2019, PHP 7.2.26 +- Standard: + . Fixed bug #78759 (array_search in $GLOBALS). (Nikita) 21 Nov 2019, PHP 7.2.25 diff --git a/ext/standard/array.c b/ext/standard/array.c index a5bcecb02c..46e8340906 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -1578,7 +1578,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) ZEND_PARSE_PARAMETERS_END(); if (strict) { - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) { + ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) { ZVAL_DEREF(entry); if (fast_is_identical_function(value, entry)) { if (behavior == 0) { @@ -1595,7 +1595,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) } ZEND_HASH_FOREACH_END(); } else { if (Z_TYPE_P(value) == IS_LONG) { - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) { + ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) { if (fast_equal_check_long(value, entry)) { if (behavior == 0) { RETURN_TRUE; @@ -1610,7 +1610,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) } } ZEND_HASH_FOREACH_END(); } else if (Z_TYPE_P(value) == IS_STRING) { - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) { + ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) { if (fast_equal_check_string(value, entry)) { if (behavior == 0) { RETURN_TRUE; @@ -1625,7 +1625,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior) } } ZEND_HASH_FOREACH_END(); } else { - ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) { + ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) { if (fast_equal_check_function(value, entry)) { if (behavior == 0) { RETURN_TRUE; diff --git a/ext/standard/tests/array/bug78759.phpt b/ext/standard/tests/array/bug78759.phpt new file mode 100644 index 0000000000..55cd29667c --- /dev/null +++ b/ext/standard/tests/array/bug78759.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug #78759: array_search in $GLOBALS +--FILE-- + +--EXPECT-- +int(22) +string(1) "a" +string(1) "a" -- cgit v1.2.1