Marcus Boerger kirjoitti:
Hello Internals,

  apparently overloaded objects do not need to implement property access
and we issue an E_NOTICE in case someone tries to none-the-less. Dmirty
thankfully made this consistent for all handlers now. However this raised a
question on my side, whether we should increase the severity to E_WARNING
or even better E_RECOVERABLE_ERROR. To me the latter choice makes the most
sense as trying to is most likely a severe issue in the software. For
example someone create a database abstraction and then for a new db that
has a C level implementation that allows to use the classes directly,
probably a third party implementation, the properties are not implemneted.
Since the tests were done using the other one errors due to property
handling are probably noticed too late. And in the described situation
anyway are clear errors rather than notices. And I cannot figure an example
where it wouldn't be the case.

E_RECOVERABLE_ERROR sounds like the best choice.

--Jani




marcus

Saturday, July 26, 2008, 8:43:57 PM, you wrote:

Hi Marcus,

I set the same severity which was used for empty read_property/write_property.

In case of changing they should be changed too.

I have no preference, so if you are interested in the change please discuss it on @internals.

Thanks. Dmitry.

Marcus Boerger wrote:
Hello Dmitry,

  can we increase the severity here? The user might think he is using a
normal object and relying on the property assignment to work. Imo it should
be an E_WARNING or even better an E_RECOVERABLE_ERROR.

marcus

Saturday, July 26, 2008, 4:08:16 PM, you wrote:

http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.716.2.12.2.24.2.32&r2=1.716.2.12.2.24.2.33&diff_format=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.32
ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.33
--- ZendEngine2/zend_execute.c:1.716.2.12.2.24.2.32     Mon Jul 14 09:49:00 2008
+++ ZendEngine2/zend_execute.c  Sat Jul 26 14:08:10 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
 */
-/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.32 2008/07/14 09:49:00 dmitry Exp $ */
+/* $Id: zend_execute.c,v 1.716.2.12.2.24.2.33 2008/07/26 14:08:10 dmitry Exp $ 
*/
#define ZEND_INTENSIVE_DEBUGGING 0 @@ -594,6 +594,11 @@
                                *retval = EG(uninitialized_zval_ptr);
                                PZVAL_LOCK(*retval);
                        }
+                       if (value_op->op_type == IS_TMP_VAR) {
+                               FREE_ZVAL(value);
+                       } else if (value_op->op_type == IS_CONST) {
+                               zval_ptr_dtor(&value);
+                       }
                        FREE_OP(free_value);
                        return;
                }
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.48.2.63&r2=1.59.2.29.2.48.2.64&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.63
ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.64
--- ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.63       Sat Jul 26 13:14:00 2008
+++ ZendEngine2/zend_vm_def.h   Sat Jul 26 14:08:11 2008
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
 */
-/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.63 2008/07/26 13:14:00 dmitry Exp $ */
+/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.64 2008/07/26 14:08:11 dmitry Exp $ */
/* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -3479,7 +3479,11 @@
                        if (IS_OP2_TMP_FREE()) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (IS_OP2_TMP_FREE()) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -3936,9 +3940,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (IS_OP2_TMP_FREE()) {
                                zval_ptr_dtor(&offset);
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.49.2.63&r2=1.62.2.30.2.49.2.64&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.63
ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.64
--- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.63   Sat Jul 26 13:14:00 2008
+++ ZendEngine2/zend_vm_execute.h       Sat Jul 26 14:08:11 2008
@@ -10688,7 +10688,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -10777,9 +10781,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -12457,7 +12471,11 @@
                        if (1) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (1) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -12546,9 +12564,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (1) {
                                zval_ptr_dtor(&offset);
@@ -14273,7 +14301,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -14362,9 +14394,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -16702,7 +16744,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -16791,9 +16837,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -17875,7 +17931,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -17963,9 +18023,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -18894,7 +18964,11 @@
                        if (1) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (1) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -18982,9 +19056,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (1) {
                                zval_ptr_dtor(&offset);
@@ -19913,7 +19997,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -20001,9 +20089,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -21202,7 +21300,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -21290,9 +21392,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -24133,7 +24245,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -24221,9 +24337,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);
@@ -25783,7 +25909,11 @@
                        if (1) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (1) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -25871,9 +26001,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (1) {
                                zval_ptr_dtor(&offset);
@@ -27479,7 +27619,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -27567,9 +27711,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);

@@ -29679,7 +29833,11 @@
                        if (0) {
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
- Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       if (Z_OBJ_HT_P(*container)->unset_property) {
+ Z_OBJ_HT_P(*container)->unset_property(*container, offset TSRMLS_CC);
+                       } else {
+                               zend_error(E_NOTICE, "Trying to unset property of 
non-object");
+                       }
                        if (0) {
                                zval_ptr_dtor(&offset);
                        } else {
@@ -29767,9 +29925,19 @@
                                MAKE_REAL_ZVAL_PTR(offset);
                        }
                        if (prop_dim) {
-                               result =
Z_OBJ_HT_P(*container)->has_property(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               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);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
property of non-object");
+                                       result = 0;
+                               }
                        } else {
-                               result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               if
(Z_OBJ_HT_P(*container)->has_dimension) {
+                                       result =
Z_OBJ_HT_P(*container)->has_dimension(*container, offset,
(opline->extended_value == ZEND_ISEMPTY) TSRMLS_CC);
+                               } else {
+                                       zend_error(E_NOTICE, "Trying to check 
element of non-array");
+                                       result = 0;
+                               }
                        }
                        if (0) {
                                zval_ptr_dtor(&offset);



Best regards,
 Marcus





Best regards,
 Marcus




--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to