php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Return to Bug #43936
Patch __empty.txt revision 2011-08-24 00:43 UTC by chrisstocktonaz at gmail dot com

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;
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Apr 19 23:01:28 2024 UTC