summaryrefslogtreecommitdiff
path: root/ext/spl/spl_array.c
diff options
context:
space:
mode:
authorFelipe Pena <felipe@php.net>2010-12-10 23:58:33 +0000
committerFelipe Pena <felipe@php.net>2010-12-10 23:58:33 +0000
commit13c99651fc7bbcc7199e1e449d9e158752caf6ce (patch)
tree17e6c5221df246bd3fd596306022f9696da1a416 /ext/spl/spl_array.c
parent3c8bc996dfebb72ea9e30d9ea1904724d849f58b (diff)
downloadphp-git-13c99651fc7bbcc7199e1e449d9e158752caf6ce.tar.gz
- Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0 values)
Diffstat (limited to 'ext/spl/spl_array.c')
-rwxr-xr-xext/spl/spl_array.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c
index 22b105b09e..e060baf674 100755
--- a/ext/spl/spl_array.c
+++ b/ext/spl/spl_array.c
@@ -569,8 +569,15 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
switch(Z_TYPE_P(offset)) {
case IS_STRING:
if (check_empty) {
- if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE && zend_is_true(*tmp)) {
- return 1;
+ if (zend_symtable_find(spl_array_get_hash_table(intern, 0 TSRMLS_CC), Z_STRVAL_P(offset), Z_STRLEN_P(offset)+1, (void **) &tmp) != FAILURE) {
+ switch (check_empty) {
+ case 0:
+ return Z_TYPE_PP(tmp) != IS_NULL;
+ case 2:
+ return 1;
+ default:
+ return zend_is_true(*tmp);
+ }
}
return 0;
} else {
@@ -587,8 +594,15 @@ static int spl_array_has_dimension_ex(int check_inherited, zval *object, zval *o
}
if (check_empty) {
HashTable *ht = spl_array_get_hash_table(intern, 0 TSRMLS_CC);
- if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE && zend_is_true(*tmp)) {
- return 1;
+ if (zend_hash_index_find(ht, index, (void **)&tmp) != FAILURE) {
+ switch (check_empty) {
+ case 0:
+ return Z_TYPE_PP(tmp) != IS_NULL;
+ case 2:
+ return 1;
+ default:
+ return zend_is_true(*tmp);
+ }
}
return 0;
} else {