Patch __empty.txt for Class/Object related Bug #43936
Patch version 2011-08-24 00:43 UTC
Return to Bug #43936 |
Download this patch
Patch Revisions:
Developer: chrisstocktonaz@gmail.com
Common subdirectories: ../php-5.3.8/Zend/RFCs and Zend/RFCs
Common subdirectories: ../php-5.3.8/Zend/tests and Zend/tests
Binary files ../php-5.3.8/Zend/zend_alloc.o and Zend/zend_alloc.o differ
diff -u ../php-5.3.8/Zend/zend_API.c Zend/zend_API.c
--- ../php-5.3.8/Zend/zend_API.c 2011-08-05 18:22:27.000000000 -0700
+++ Zend/zend_API.c 2011-08-23 12:05:53.000000000 -0700
@@ -1770,6 +1770,12 @@
} else if (ARG_SHOULD_BE_SENT_BY_REF(fptr, 1)) {
zend_error(error_type, "Method %s::%s() cannot take arguments by reference", ce->name, ZEND_ISSET_FUNC_NAME);
}
+ } else if (name_len == sizeof(ZEND_EMPTY_FUNC_NAME) - 1 && !memcmp(lcname, ZEND_EMPTY_FUNC_NAME, sizeof(ZEND_EMPTY_FUNC_NAME))) {
+ if (fptr->common.num_args != 1) {
+ zend_error(error_type, "Method %s::%s() must take exactly 1 argument", ce->name, ZEND_EMPTY_FUNC_NAME);
+ } else if (ARG_SHOULD_BE_SENT_BY_REF(fptr, 1)) {
+ zend_error(error_type, "Method %s::%s() cannot take arguments by reference", ce->name, ZEND_EMPTY_FUNC_NAME);
+ }
} else if (name_len == sizeof(ZEND_CALL_FUNC_NAME) - 1 && !memcmp(lcname, ZEND_CALL_FUNC_NAME, sizeof(ZEND_CALL_FUNC_NAME))) {
if (fptr->common.num_args != 2) {
zend_error(error_type, "Method %s::%s() must take exactly 2 arguments", ce->name, ZEND_CALL_FUNC_NAME);
@@ -1801,7 +1807,7 @@
int count=0, unload=0;
HashTable *target_function_table = function_table;
int error_type;
- zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL;
+ zend_function *ctor = NULL, *dtor = NULL, *clone = NULL, *__get = NULL, *__set = NULL, *__unset = NULL, *__isset = NULL, *__empty = NULL, *__call = NULL, *__callstatic = NULL, *__tostring = NULL;
char *lowercase_name;
int fname_len;
char *lc_class_name = NULL;
@@ -1931,6 +1937,8 @@
__unset = reg_function;
} else if ((fname_len == sizeof(ZEND_ISSET_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_ISSET_FUNC_NAME, sizeof(ZEND_ISSET_FUNC_NAME))) {
__isset = reg_function;
+ } else if ((fname_len == sizeof(ZEND_EMPTY_FUNC_NAME)-1) && !memcmp(lowercase_name, ZEND_EMPTY_FUNC_NAME, sizeof(ZEND_EMPTY_FUNC_NAME))) {
+ __empty = reg_function;
} else {
reg_function = NULL;
}
@@ -1969,6 +1977,7 @@
scope->__set = __set;
scope->__unset = __unset;
scope->__isset = __isset;
+ scope->__empty = __empty;
if (ctor) {
ctor->common.fn_flags |= ZEND_ACC_CTOR;
if (ctor->common.fn_flags & ZEND_ACC_STATIC) {
@@ -2032,6 +2041,12 @@
}
__isset->common.fn_flags &= ~ZEND_ACC_ALLOW_STATIC;
}
+ if (__empty) {
+ if (__empty->common.fn_flags & ZEND_ACC_STATIC) {
+ zend_error(error_type, "Method %s::%s() cannot be static", scope->name, __isset->common.function_name);
+ }
+ __empty->common.fn_flags &= ~ZEND_ACC_ALLOW_STATIC;
+ }
efree(lc_class_name);
}
return SUCCESS;
Binary files ../php-5.3.8/Zend/zend_API.o and Zend/zend_API.o differ
diff -u ../php-5.3.8/Zend/zend_builtin_functions.c Zend/zend_builtin_functions.c
--- ../php-5.3.8/Zend/zend_builtin_functions.c 2011-08-08 07:54:50.000000000 -0700
+++ Zend/zend_builtin_functions.c 2011-08-23 16:57:36.000000000 -0700
@@ -1148,7 +1148,7 @@
if (Z_TYPE_P(object) == IS_OBJECT &&
Z_OBJ_HANDLER_P(object, has_property) &&
- Z_OBJ_HANDLER_P(object, has_property)(object, &property_z, 2 TSRMLS_CC)) {
+ Z_OBJ_HANDLER_P(object, has_property)(object, &property_z, 3 TSRMLS_CC)) {
RETURN_TRUE;
}
RETURN_FALSE;
Binary files ../php-5.3.8/Zend/zend_builtin_functions.o and Zend/zend_builtin_functions.o differ
Binary files ../php-5.3.8/Zend/zend_closures.o and Zend/zend_closures.o differ
diff -u ../php-5.3.8/Zend/zend_compile.c Zend/zend_compile.c
--- ../php-5.3.8/Zend/zend_compile.c 2011-07-08 09:29:33.000000000 -0700
+++ Zend/zend_compile.c 2011-08-23 12:04:23.000000000 -0700
@@ -1265,6 +1265,10 @@
if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
zend_error(E_WARNING, "The magic method __isset() must have public visibility and cannot be static");
}
+ } else if ((name_len == sizeof(ZEND_EMPTY_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_EMPTY_FUNC_NAME, sizeof(ZEND_EMPTY_FUNC_NAME)-1))) {
+ if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
+ zend_error(E_WARNING, "The magic method __empty() must have public visibility and cannot be static");
+ }
} else if ((name_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME)-1))) {
if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
zend_error(E_WARNING, "The magic method __toString() must have public visibility and cannot be static");
@@ -1320,6 +1324,11 @@
zend_error(E_WARNING, "The magic method __isset() must have public visibility and cannot be static");
}
CG(active_class_entry)->__isset = (zend_function *) CG(active_op_array);
+ } else if ((name_len == sizeof(ZEND_EMPTY_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_EMPTY_FUNC_NAME, sizeof(ZEND_EMPTY_FUNC_NAME)-1))) {
+ if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
+ zend_error(E_WARNING, "The magic method __empty() must have public visibility and cannot be static");
+ }
+ CG(active_class_entry)->__empty = (zend_function *) CG(active_op_array);
} else if ((name_len == sizeof(ZEND_TOSTRING_FUNC_NAME)-1) && (!memcmp(lcname, ZEND_TOSTRING_FUNC_NAME, sizeof(ZEND_TOSTRING_FUNC_NAME)-1))) {
if (fn_flags & ((ZEND_ACC_PPP_MASK | ZEND_ACC_STATIC) ^ ZEND_ACC_PUBLIC)) {
zend_error(E_WARNING, "The magic method __toString() must have public visibility and cannot be static");
@@ -2445,6 +2454,9 @@
if (!ce->__isset) {
ce->__isset = ce->parent->__isset;
}
+ if (!ce->__empty) {
+ ce->__empty = ce->parent->__empty;
+ }
if (!ce->__call) {
ce->__call = ce->parent->__call;
}
@@ -5041,6 +5053,7 @@
ce->__set = NULL;
ce->__unset = NULL;
ce->__isset = NULL;
+ ce->__empty = NULL;
ce->__call = NULL;
ce->__callstatic = NULL;
ce->__tostring = NULL;
diff -u ../php-5.3.8/Zend/zend_compile.h Zend/zend_compile.h
--- ../php-5.3.8/Zend/zend_compile.h 2011-06-11 18:43:10.000000000 -0700
+++ Zend/zend_compile.h 2011-08-23 12:00:59.000000000 -0700
@@ -742,6 +742,7 @@
#define ZEND_SET_FUNC_NAME "__set"
#define ZEND_UNSET_FUNC_NAME "__unset"
#define ZEND_ISSET_FUNC_NAME "__isset"
+#define ZEND_EMPTY_FUNC_NAME "__empty"
#define ZEND_CALL_FUNC_NAME "__call"
#define ZEND_CALLSTATIC_FUNC_NAME "__callstatic"
#define ZEND_TOSTRING_FUNC_NAME "__tostring"
Binary files ../php-5.3.8/Zend/zend_compile.o and Zend/zend_compile.o differ
Binary files ../php-5.3.8/Zend/zend_constants.o and Zend/zend_constants.o differ
Binary files ../php-5.3.8/Zend/zend_default_classes.o and Zend/zend_default_classes.o differ
Binary files ../php-5.3.8/Zend/zend_dynamic_array.o and Zend/zend_dynamic_array.o differ
Binary files ../php-5.3.8/Zend/zend_exceptions.o and Zend/zend_exceptions.o differ
Binary files ../php-5.3.8/Zend/zend_execute_API.o and Zend/zend_execute_API.o differ
Binary files ../php-5.3.8/Zend/zend_execute.o and Zend/zend_execute.o differ
Binary files ../php-5.3.8/Zend/zend_extensions.o and Zend/zend_extensions.o differ
Binary files ../php-5.3.8/Zend/zend_float.o and Zend/zend_float.o differ
Binary files ../php-5.3.8/Zend/zend_gc.o and Zend/zend_gc.o differ
diff -u ../php-5.3.8/Zend/zend.h Zend/zend.h
--- ../php-5.3.8/Zend/zend.h 2011-01-16 13:39:22.000000000 -0700
+++ Zend/zend.h 2011-08-23 14:47:16.000000000 -0700
@@ -291,6 +291,7 @@
zend_bool in_set;
zend_bool in_unset;
zend_bool in_isset;
+ zend_bool in_empty;
zend_bool dummy; /* sizeof(zend_guard) must not be equal to sizeof(void*) */
} zend_guard;
@@ -439,6 +440,7 @@
union _zend_function *__set;
union _zend_function *__unset;
union _zend_function *__isset;
+ union _zend_function *__empty;
union _zend_function *__call;
union _zend_function *__callstatic;
union _zend_function *__tostring;
Binary files ../php-5.3.8/Zend/zend_hash.o and Zend/zend_hash.o differ
Binary files ../php-5.3.8/Zend/zend_highlight.o and Zend/zend_highlight.o differ
Binary files ../php-5.3.8/Zend/zend_indent.o and Zend/zend_indent.o differ
Binary files ../php-5.3.8/Zend/zend_ini.o and Zend/zend_ini.o differ
Binary files ../php-5.3.8/Zend/zend_ini_parser.o and Zend/zend_ini_parser.o differ
Binary files ../php-5.3.8/Zend/zend_ini_scanner.o and Zend/zend_ini_scanner.o differ
Binary files ../php-5.3.8/Zend/zend_interfaces.o and Zend/zend_interfaces.o differ
Binary files ../php-5.3.8/Zend/zend_iterators.o and Zend/zend_iterators.o differ
Binary files ../php-5.3.8/Zend/zend_language_parser.o and Zend/zend_language_parser.o differ
Binary files ../php-5.3.8/Zend/zend_language_scanner.o and Zend/zend_language_scanner.o differ
Binary files ../php-5.3.8/Zend/zend_list.o and Zend/zend_list.o differ
Binary files ../php-5.3.8/Zend/zend_llist.o and Zend/zend_llist.o differ
Binary files ../php-5.3.8/Zend/zend_multibyte.o and Zend/zend_multibyte.o differ
Binary files ../php-5.3.8/Zend/zend.o and Zend/zend.o differ
diff -u ../php-5.3.8/Zend/zend_object_handlers.c Zend/zend_object_handlers.c
--- ../php-5.3.8/Zend/zend_object_handlers.c 2011-04-07 06:35:27.000000000 -0700
+++ Zend/zend_object_handlers.c 2011-08-23 17:26:17.000000000 -0700
@@ -158,6 +158,27 @@
}
/* }}} */
+static zval *zend_std_call_isempty(zval *object, zval *member TSRMLS_DC) /* {{{ */
+{
+ zval *retval = NULL;
+ zend_class_entry *ce = Z_OBJCE_P(object);
+
+ /* __empty handler is called with one argument:
+ property name
+
+ it should return whether the property is empty or not
+ */
+
+ SEPARATE_ARG_IF_REF(member);
+
+ zend_call_method_with_1_params(&object, ce, &ce->__empty, ZEND_EMPTY_FUNC_NAME, &retval, member);
+
+ zval_ptr_dtor(&member);
+
+ return retval;
+}
+/* }}} */
+
static int zend_verify_property_access(zend_property_info *property_info, zend_class_entry *ce TSRMLS_DC) /* {{{ */
{
switch (property_info->flags & ZEND_ACC_PPP_MASK) {
@@ -307,6 +328,7 @@
stub.in_set = 0;
stub.in_unset = 0;
stub.in_isset = 0;
+ stub.in_empty = 0;
return zend_hash_quick_add(zobj->guards, property_info->name, property_info->name_length+1, property_info->h, (void**)&stub, sizeof(stub), (void**) pguard);
}
/* }}} */
@@ -1164,14 +1186,34 @@
#if DEBUG_OBJECT_HANDLERS
fprintf(stderr, "Read object #%d property: %s\n", Z_OBJ_HANDLE_P(object), Z_STRVAL_P(member));
#endif
-
property_info = zend_get_property_info(zobj->ce, member, 1 TSRMLS_CC);
if (!property_info || zend_hash_quick_find(zobj->properties, property_info->name, property_info->name_length+1, property_info->h, (void **) &value) == FAILURE) {
zend_guard *guard;
result = 0;
- if ((has_set_exists != 2) &&
+
+ if(has_set_exists == ZEND_ISEMPTY &&
+ zobj->ce->__empty &&
+ zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
+ !guard->in_empty) {
+ zval *rv;
+
+ /* have empty func - try with it! */
+ Z_ADDREF_P(object);
+ if (PZVAL_IS_REF(object)) {
+ SEPARATE_ZVAL(&object);
+ }
+ guard->in_empty = 1; /* prevent circular getting */
+ rv = zend_std_call_isempty(object, member TSRMLS_CC);
+ if (rv) {
+ result = !zend_is_true(rv);
+ zval_ptr_dtor(&rv);
+ }
+ guard->in_empty = 0;
+ zval_ptr_dtor(&object);
+
+ } else if (has_set_exists == ZEND_ISSET &&
zobj->ce->__isset &&
zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
!guard->in_isset) {
@@ -1187,7 +1229,7 @@
if (rv) {
result = zend_is_true(rv);
zval_ptr_dtor(&rv);
- if (has_set_exists && result) {
+ if (!result) {
if (!EG(exception) && zobj->ce->__get && !guard->in_get) {
guard->in_get = 1;
rv = zend_std_call_getter(object, member TSRMLS_CC);
@@ -1208,17 +1250,17 @@
zval_ptr_dtor(&object);
}
} else {
- switch (has_set_exists) {
- case 0:
+ switch (has_set_exists) {
+ case ZEND_ISSET:
result = (Z_TYPE_PP(value) != IS_NULL);
break;
- default:
+ case ZEND_ISEMPTY:
result = zend_is_true(*value);
break;
- case 2:
- result = 1;
- break;
- }
+ case 3: // comes from property_exists
+ result = 1;
+ break;
+ }
}
if (tmp_member) {
Binary files ../php-5.3.8/Zend/zend_object_handlers.o and Zend/zend_object_handlers.o differ
Binary files ../php-5.3.8/Zend/zend_objects_API.o and Zend/zend_objects_API.o differ
Binary files ../php-5.3.8/Zend/zend_objects.o and Zend/zend_objects.o differ
Binary files ../php-5.3.8/Zend/zend_opcode.o and Zend/zend_opcode.o differ
Binary files ../php-5.3.8/Zend/zend_operators.o and Zend/zend_operators.o differ
Binary files ../php-5.3.8/Zend/zend_ptr_stack.o and Zend/zend_ptr_stack.o differ
Binary files ../php-5.3.8/Zend/zend_qsort.o and Zend/zend_qsort.o differ
Binary files ../php-5.3.8/Zend/zend_sprintf.o and Zend/zend_sprintf.o differ
Binary files ../php-5.3.8/Zend/zend_stack.o and Zend/zend_stack.o differ
Binary files ../php-5.3.8/Zend/zend_stream.o and Zend/zend_stream.o differ
Binary files ../php-5.3.8/Zend/zend_strtod.o and Zend/zend_strtod.o differ
Binary files ../php-5.3.8/Zend/zend_ts_hash.o and Zend/zend_ts_hash.o differ
Binary files ../php-5.3.8/Zend/zend_variables.o and Zend/zend_variables.o differ
diff -u ../php-5.3.8/Zend/zend_vm_def.h Zend/zend_vm_def.h
--- ../php-5.3.8/Zend/zend_vm_def.h 2011-07-11 03:31:49.000000000 -0700
+++ Zend/zend_vm_def.h 2011-08-23 16:10:12.000000000 -0700
@@ -4009,7 +4009,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
diff -u ../php-5.3.8/Zend/zend_vm_execute.h Zend/zend_vm_execute.h
--- ../php-5.3.8/Zend/zend_vm_execute.h 2011-07-11 03:31:49.000000000 -0700
+++ Zend/zend_vm_execute.h 2011-08-23 15:43:17.000000000 -0700
@@ -10898,6 +10898,8 @@
zval **container = _get_zval_ptr_ptr_var(&opline->op1, EX(Ts), &free_op1 TSRMLS_CC);
zval **value = NULL;
int result = 0;
+ fprintf(stderr, "has_set_exists isset %d\n", ZEND_ISSET);
+ fprintf(stderr, "has_set_exists empty %d\n", ZEND_ISEMPTY);
if (IS_VAR != IS_VAR || container) {
@@ -10959,9 +10961,10 @@
if (0) {
MAKE_REAL_ZVAL_PTR(offset);
}
+ zend_error(E_WARNING, "debug: %d", opline->extended_value);
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -12712,7 +12715,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -14514,7 +14517,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -16902,7 +16905,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -18094,7 +18097,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -19153,7 +19156,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -20212,7 +20215,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -21530,7 +21533,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -24544,7 +24547,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -26186,7 +26189,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -27878,7 +27881,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
@@ -30057,7 +30060,7 @@
}
if (prop_dim) {
if (Z_OBJ_HT_P(*container)->has_property) {
- result = Z_OBJ_HT_P(*container)->has_property(*container, offset, (opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+ result = Z_OBJ_HT_P(*container)->has_property(*container, offset, opline->extended_value TSRMLS_CC);
} else {
zend_error(E_NOTICE, "Trying to check property of non-object");
result = 0;
|