]> granicus.if.org Git - php/commitdiff
Fixed bug #78759
authorNikita Popov <nikita.ppv@gmail.com>
Thu, 7 Nov 2019 10:15:29 +0000 (11:15 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 7 Nov 2019 10:15:29 +0000 (11:15 +0100)
Handle INDIRECT values in array.

NEWS
ext/standard/array.c
ext/standard/tests/array/bug78759.phpt [new file with mode: 0644]

diff --git a/NEWS b/NEWS
index 32b9837579d9c90d622cacfd11b9b261cde60667..3160a9fdaa7dd652fc2d69d8de2305b6a97dec7e 100644 (file)
--- 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
 
index a5bcecb02c9d2c234881812cce4380c572311e5f..46e83409066d8611945e79624399024661c9ca24 100644 (file)
@@ -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 (file)
index 0000000..55cd296
--- /dev/null
@@ -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"