summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-11-07 11:17:14 +0100
committerNikita Popov <nikita.ppv@gmail.com>2019-11-07 11:17:14 +0100
commitaed4f6e8492d64de10c540dc57a30a995163ac3e (patch)
treed58323a05ae011da3edd94751c2ebe30a86a7ab8
parent0988f6963420ab26b7804e080380b813ca79cfa8 (diff)
parent8d2a9d8859db8c3b35e44ae55f0bdadeb594d872 (diff)
downloadphp-git-aed4f6e8492d64de10c540dc57a30a995163ac3e.tar.gz
Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3: Fixed bug #78759
-rw-r--r--NEWS1
-rw-r--r--ext/standard/array.c10
-rw-r--r--ext/standard/tests/array/bug78759.phpt15
3 files changed, 21 insertions, 5 deletions
diff --git a/NEWS b/NEWS
index ae50a66bed..f0247cbead 100644
--- a/NEWS
+++ b/NEWS
@@ -9,6 +9,7 @@ PHP NEWS
- Standard:
. Fixed bug #77930 (stream_copy_to_stream should use mmap more often).
(Nikita)
+ . Fixed bug #78759 (array_search in $GLOBALS). (Nikita)
- OpenSSL:
. Fixed bug #78775 (TLS issues from HTTP request affecting other encrypted
diff --git a/ext/standard/array.c b/ext/standard/array.c
index d44e5d50e7..ec0890478a 100644
--- a/ext/standard/array.c
+++ b/ext/standard/array.c
@@ -1558,7 +1558,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
if (strict) {
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) {
ZVAL_DEREF(entry);
if (Z_TYPE_P(entry) == IS_LONG && Z_LVAL_P(entry) == Z_LVAL_P(value)) {
if (behavior == 0) {
@@ -1574,7 +1574,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) {
ZVAL_DEREF(entry);
if (fast_is_identical_function(value, entry)) {
if (behavior == 0) {
@@ -1592,7 +1592,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
}
} 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;
@@ -1607,7 +1607,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;
@@ -1622,7 +1622,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--
+<?php
+
+$a = 22;
+var_dump($GLOBALS["a"]); // int 22
+var_dump(array_search(22, $GLOBALS)); // false
+var_dump(array_search(22, $GLOBALS, true)); // false
+
+?>
+--EXPECT--
+int(22)
+string(1) "a"
+string(1) "a"