diff options
author | Felipe Pena <felipe@php.net> | 2010-12-10 23:58:33 +0000 |
---|---|---|
committer | Felipe Pena <felipe@php.net> | 2010-12-10 23:58:33 +0000 |
commit | 13c99651fc7bbcc7199e1e449d9e158752caf6ce (patch) | |
tree | 17e6c5221df246bd3fd596306022f9696da1a416 /ext/spl/spl_array.c | |
parent | 3c8bc996dfebb72ea9e30d9ea1904724d849f58b (diff) | |
download | php-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-x | ext/spl/spl_array.c | 22 |
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 { |