Skip to content

Commit f2fa7a4

Browse files
committed
Don't make difference between undefined and unaccessible properies when call __get() and family
1 parent 6b203aa commit f2fa7a4

File tree

1 file changed

+8
-30
lines changed

1 file changed

+8
-30
lines changed

Zend/zend_object_handlers.c

Lines changed: 8 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -423,41 +423,19 @@ ZEND_API int zend_check_property_access(zend_object *zobj, zend_string *prop_inf
423423
}
424424
/* }}} */
425425

426-
static zend_long *zend_get_property_guard(zend_object *zobj, zend_property_info *property_info, zval *member) /* {{{ */
426+
static zend_long *zend_get_property_guard(zend_object *zobj, zval *member) /* {{{ */
427427
{
428-
zend_property_info info;
429428
zval stub, *guard;
430-
zend_string *str = NULL;
431429

432-
if (!property_info) {
433-
property_info = &info;
434-
info.name = Z_STR_P(member);
435-
} else if(property_info->name->val[0] == '\0'){
436-
const char *class_name = NULL, *prop_name = NULL;
437-
size_t prop_name_len;
438-
zend_unmangle_property_name_ex(property_info->name, &class_name,
439-
&prop_name, &prop_name_len);
440-
if (class_name) {
441-
/* use unmangled name for protected properties */
442-
str = info.name = zend_string_init(prop_name, prop_name_len, 0);
443-
property_info = &info;
444-
}
445-
}
446430
if (!zobj->guards) {
447431
ALLOC_HASHTABLE(zobj->guards);
448432
zend_hash_init(zobj->guards, 8, NULL, NULL, 0);
449-
} else if ((guard = zend_hash_find(zobj->guards, property_info->name)) != NULL) {
450-
if (str) {
451-
zend_string_release(str);
452-
}
433+
} else if ((guard = zend_hash_find(zobj->guards, Z_STR_P(member))) != NULL) {
453434
return &Z_LVAL_P(guard);
454435
}
455436

456437
ZVAL_LONG(&stub, 0);
457-
guard = zend_hash_add_new(zobj->guards, property_info->name, &stub);
458-
if (str) {
459-
zend_string_release(str);
460-
}
438+
guard = zend_hash_add_new(zobj->guards, Z_STR_P(member), &stub);
461439
return &Z_LVAL_P(guard);
462440
}
463441
/* }}} */
@@ -500,7 +478,7 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_
500478

501479
/* magic get */
502480
if (zobj->ce->__get) {
503-
zend_long *guard = zend_get_property_guard(zobj, property_info, member);
481+
zend_long *guard = zend_get_property_guard(zobj, member);
504482
if (!((*guard) & IN_GET)) {
505483
zval tmp_object;
506484

@@ -633,7 +611,7 @@ ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, v
633611

634612
/* magic set */
635613
if (zobj->ce->__set) {
636-
zend_long *guard = zend_get_property_guard(zobj, property_info, member);
614+
zend_long *guard = zend_get_property_guard(zobj, member);
637615

638616
if (!((*guard) & IN_SET)) {
639617
zval tmp_object;
@@ -807,7 +785,7 @@ static zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type,
807785
}
808786

809787
if (!zobj->ce->__get ||
810-
(guard = zend_get_property_guard(zobj, property_info, member)) == NULL ||
788+
(guard = zend_get_property_guard(zobj, member)) == NULL ||
811789
(property_info && ((*guard) & IN_GET))) {
812790

813791
ZVAL_NULL(&tmp);
@@ -873,7 +851,7 @@ static void zend_std_unset_property(zval *object, zval *member, void **cache_slo
873851

874852
/* magic unset */
875853
if (zobj->ce->__unset) {
876-
zend_long *guard = zend_get_property_guard(zobj, property_info, member);
854+
zend_long *guard = zend_get_property_guard(zobj, member);
877855
if (!((*guard) & IN_UNSET)) {
878856
zval tmp_object;
879857

@@ -1481,7 +1459,7 @@ static int zend_std_has_property(zval *object, zval *member, int has_set_exists,
14811459

14821460
result = 0;
14831461
if ((has_set_exists != 2) && zobj->ce->__isset) {
1484-
zend_long *guard = zend_get_property_guard(zobj, property_info, member);
1462+
zend_long *guard = zend_get_property_guard(zobj, member);
14851463

14861464
if (!((*guard) & IN_ISSET)) {
14871465
zval rv;

0 commit comments

Comments
 (0)