diff options
-rw-r--r-- | Zend/zend_closures.c | 2 | ||||
-rw-r--r-- | Zend/zend_object_handlers.c | 13 | ||||
-rw-r--r-- | Zend/zend_object_handlers.h | 4 | ||||
-rw-r--r-- | ext/mysqli/mysqli.c | 6 | ||||
-rw-r--r-- | ext/snmp/snmp.c | 4 | ||||
-rw-r--r-- | ext/spl/spl_array.c | 10 | ||||
-rw-r--r-- | ext/standard/array.c | 4 |
7 files changed, 24 insertions, 19 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 4eb2f13266..65193af563 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -412,7 +412,7 @@ static zval *zend_closure_get_property_ptr_ptr(zval *object, zval *member, int t static int zend_closure_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot) /* {{{ */ { - if (has_set_exists != 2) { + if (has_set_exists != ZEND_PROPERTY_EXISTS) { ZEND_CLOSURE_PROPERTY_ERROR(); } return 0; diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 7889f523ee..cb7710343d 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1657,16 +1657,17 @@ ZEND_API int zend_std_has_property(zval *object, zval *member, int has_set_exist } found: switch (has_set_exists) { - case 0: + case ZEND_PROPERTY_ISSET: ZVAL_DEREF(value); result = (Z_TYPE_P(value) != IS_NULL); break; + case ZEND_PROPERTY_EXISTS: + result = 1; + break; + case ZEND_PROPERTY_HAS: default: result = zend_is_true(value); break; - case 2: - result = 1; - break; } goto exit; } @@ -1677,7 +1678,7 @@ found: } result = 0; - if ((has_set_exists != 2) && zobj->ce->__isset) { + if ((has_set_exists != ZEND_PROPERTY_EXISTS) && zobj->ce->__isset) { uint32_t *guard = zend_get_property_guard(zobj, Z_STR_P(member)); if (!((*guard) & IN_ISSET)) { @@ -1694,7 +1695,7 @@ found: if (Z_TYPE(rv) != IS_UNDEF) { result = zend_is_true(&rv); zval_ptr_dtor(&rv); - if (has_set_exists && result) { + if (has_set_exists == ZEND_PROPERTY_HAS && result) { if (EXPECTED(!EG(exception)) && zobj->ce->__get && !((*guard) & IN_GET)) { (*guard) |= IN_GET; zend_std_call_getter(zobj, member, &rv); diff --git a/Zend/zend_object_handlers.h b/Zend/zend_object_handlers.h index 1dfed715f3..26b16adcc8 100644 --- a/Zend/zend_object_handlers.h +++ b/Zend/zend_object_handlers.h @@ -173,6 +173,10 @@ extern const ZEND_API zend_object_handlers std_object_handlers; #define zend_get_function_root_class(fbc) \ ((fbc)->common.prototype ? (fbc)->common.prototype->common.scope : (fbc)->common.scope) +#define ZEND_PROPERTY_ISSET 0x0 /* Property is exists and not NULL */ +#define ZEND_PROPERTY_HAS 0x1 /* Property is exists and is TRUE */ +#define ZEND_PROPERTY_EXISTS 0x2 /* Property is exists */ + ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name_strval, const zval *key); ZEND_API zval *zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, zend_bool silent); ZEND_API ZEND_COLD zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_string *property_name); diff --git a/ext/mysqli/mysqli.c b/ext/mysqli/mysqli.c index 6cc724f42e..4a32fb41ba 100644 --- a/ext/mysqli/mysqli.c +++ b/ext/mysqli/mysqli.c @@ -382,10 +382,10 @@ static int mysqli_object_has_property(zval *object, zval *member, int has_set_ex if ((p = zend_hash_find_ptr(obj->prop_handler, Z_STR_P(member))) != NULL) { switch (has_set_exists) { - case 2: + case ZEND_PROPERTY_EXISTS: ret = 1; break; - case 1: { + case ZEND_PROPERTY_HAS: { zval rv; zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv); if (value != &EG(uninitialized_zval)) { @@ -394,7 +394,7 @@ static int mysqli_object_has_property(zval *object, zval *member, int has_set_ex } break; } - case 0:{ + case ZEND_PROPERTY_ISSET: { zval rv; zval *value = mysqli_read_property(object, member, BP_VAR_IS, cache_slot, &rv); if (value != &EG(uninitialized_zval)) { diff --git a/ext/snmp/snmp.c b/ext/snmp/snmp.c index 42cc69c685..6f61eb2e28 100644 --- a/ext/snmp/snmp.c +++ b/ext/snmp/snmp.c @@ -1994,10 +1994,10 @@ static int php_snmp_has_property(zval *object, zval *member, int has_set_exists, if ((hnd = zend_hash_find_ptr(&php_snmp_properties, Z_STR_P(member))) != NULL) { switch (has_set_exists) { - case 2: + case ZEND_PROPERTY_EXISTS: ret = 1; break; - case 0: { + case ZEND_PROPERTY_ISSET: { zval *value = php_snmp_read_property(object, member, BP_VAR_IS, cache_slot, &rv); if (value != &EG(uninitialized_zval)) { ret = Z_TYPE_P(value) != IS_NULL? 1 : 0; diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index 59ae0b8c89..3039f10d7b 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -872,7 +872,7 @@ static zval *spl_array_read_property(zval *object, zval *member, int type, void spl_array_object *intern = Z_SPLARRAY_P(object); if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0 - && !zend_std_has_property(object, member, 2, NULL)) { + && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) { return spl_array_read_dimension(object, member, type, rv); } return zend_std_read_property(object, member, type, cache_slot, rv); @@ -883,7 +883,7 @@ static void spl_array_write_property(zval *object, zval *member, zval *value, vo spl_array_object *intern = Z_SPLARRAY_P(object); if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0 - && !zend_std_has_property(object, member, 2, NULL)) { + && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) { spl_array_write_dimension(object, member, value); return; } @@ -895,7 +895,7 @@ static zval *spl_array_get_property_ptr_ptr(zval *object, zval *member, int type spl_array_object *intern = Z_SPLARRAY_P(object); if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0 - && !zend_std_has_property(object, member, 2, NULL)) { + && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) { /* If object has offsetGet() overridden, then fallback to read_property, * which will call offsetGet(). */ if (intern->fptr_offset_get) { @@ -911,7 +911,7 @@ static int spl_array_has_property(zval *object, zval *member, int has_set_exists spl_array_object *intern = Z_SPLARRAY_P(object); if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0 - && !zend_std_has_property(object, member, 2, NULL)) { + && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) { return spl_array_has_dimension(object, member, has_set_exists); } return zend_std_has_property(object, member, has_set_exists, cache_slot); @@ -922,7 +922,7 @@ static void spl_array_unset_property(zval *object, zval *member, void **cache_sl spl_array_object *intern = Z_SPLARRAY_P(object); if ((intern->ar_flags & SPL_ARRAY_ARRAY_AS_PROPS) != 0 - && !zend_std_has_property(object, member, 2, NULL)) { + && !zend_std_has_property(object, member, ZEND_PROPERTY_EXISTS, NULL)) { spl_array_unset_dimension(object, member); return; } diff --git a/ext/standard/array.c b/ext/standard/array.c index 28fbb5188d..c073d7d5ac 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -4110,8 +4110,8 @@ static inline zval *array_column_fetch_prop(zval *data, zval *name, zval *rv) /* /* The has_property check is first performed in "exists" mode (which returns true for * properties that are null but exist) and then in "has" mode to handle objects that * implement __isset (which is not called in "exists" mode). */ - if (Z_OBJ_HANDLER_P(data, has_property)(data, name, 2, NULL) - || Z_OBJ_HANDLER_P(data, has_property)(data, name, 0, NULL)) { + if (Z_OBJ_HANDLER_P(data, has_property)(data, name, ZEND_PROPERTY_EXISTS, NULL) + || Z_OBJ_HANDLER_P(data, has_property)(data, name, ZEND_PROPERTY_ISSET, NULL)) { prop = Z_OBJ_HANDLER_P(data, read_property)(data, name, BP_VAR_R, NULL, rv); if (prop) { ZVAL_DEREF(prop); |