Skip to content

Commit 5fa6dcd

Browse files
committed
Fixed bug #78759
Handle INDIRECT values in array.
1 parent d317e16 commit 5fa6dcd

File tree

3 files changed

+21
-4
lines changed

3 files changed

+21
-4
lines changed

NEWS

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ PHP NEWS
22
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
33
?? ??? 2019, PHP 7.2.26
44

5+
- Standard:
6+
. Fixed bug #78759 (array_search in $GLOBALS). (Nikita)
57

68
21 Nov 2019, PHP 7.2.25
79

ext/standard/array.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1578,7 +1578,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
15781578
ZEND_PARSE_PARAMETERS_END();
15791579

15801580
if (strict) {
1581-
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
1581+
ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
15821582
ZVAL_DEREF(entry);
15831583
if (fast_is_identical_function(value, entry)) {
15841584
if (behavior == 0) {
@@ -1595,7 +1595,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
15951595
} ZEND_HASH_FOREACH_END();
15961596
} else {
15971597
if (Z_TYPE_P(value) == IS_LONG) {
1598-
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
1598+
ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
15991599
if (fast_equal_check_long(value, entry)) {
16001600
if (behavior == 0) {
16011601
RETURN_TRUE;
@@ -1610,7 +1610,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
16101610
}
16111611
} ZEND_HASH_FOREACH_END();
16121612
} else if (Z_TYPE_P(value) == IS_STRING) {
1613-
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
1613+
ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
16141614
if (fast_equal_check_string(value, entry)) {
16151615
if (behavior == 0) {
16161616
RETURN_TRUE;
@@ -1625,7 +1625,7 @@ static inline void php_search_array(INTERNAL_FUNCTION_PARAMETERS, int behavior)
16251625
}
16261626
} ZEND_HASH_FOREACH_END();
16271627
} else {
1628-
ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
1628+
ZEND_HASH_FOREACH_KEY_VAL_IND(Z_ARRVAL_P(array), num_idx, str_idx, entry) {
16291629
if (fast_equal_check_function(value, entry)) {
16301630
if (behavior == 0) {
16311631
RETURN_TRUE;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
--TEST--
2+
Bug #78759: array_search in $GLOBALS
3+
--FILE--
4+
<?php
5+
6+
$a = 22;
7+
var_dump($GLOBALS["a"]); // int 22
8+
var_dump(array_search(22, $GLOBALS)); // false
9+
var_dump(array_search(22, $GLOBALS, true)); // false
10+
11+
?>
12+
--EXPECT--
13+
int(22)
14+
string(1) "a"
15+
string(1) "a"

0 commit comments

Comments
 (0)