cvs: ZendEngine2 / zend_execute.c zend_vm_def.h zend_vm_execute.h

"Dmitry Stogov" <[email protected]>
Newsgroups gmane.comp.php.cvs.zend
Message-ID <cvsdmitry1217081346@cvsserver>
dmitry		Sat Jul 26 14:09:06 2008 UTC

  Modified files:              
    /ZendEngine2	zend_execute.c zend_vm_def.h zend_vm_execute.h 
  Log:
  Fixed crashes and memory leak for objects with NULL write_property/has_property/unset_property handlers

-- 
Zend Engine CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
dmitry-20080726140906.txt (text/plain, 19.4 KB)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_execute.c?r1=1.800&r2=1.801&diff_format=u
Index: ZendEngine2/zend_execute.c
diff -u ZendEngine2/zend_execute.c:1.800 ZendEngine2/zend_execute.c:1.801
--- ZendEngine2/zend_execute.c:1.800	Tue Jul  8 07:05:03 2008
+++ ZendEngine2/zend_execute.c	Sat Jul 26 14:09:05 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_execute.c,v 1.800 2008/07/08 07:05:03 dmitry Exp $ */
+/* $Id: zend_execute.c,v 1.801 2008/07/26 14:09:05 dmitry Exp $ */
 
 #define ZEND_INTENSIVE_DEBUGGING 0
 
@@ -600,6 +600,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.237&r2=1.238&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.237 ZendEngine2/zend_vm_def.h:1.238
--- ZendEngine2/zend_vm_def.h:1.237	Sat Jul 26 13:14:55 2008
+++ ZendEngine2/zend_vm_def.h	Sat Jul 26 14:09:05 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.237 2008/07/26 13:14:55 dmitry Exp $ */
+/* $Id: zend_vm_def.h,v 1.238 2008/07/26 14:09:05 dmitry Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -3608,7 +3608,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 {
@@ -4097,9 +4101,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.241&r2=1.242&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.241 ZendEngine2/zend_vm_execute.h:1.242
--- ZendEngine2/zend_vm_execute.h:1.241	Sat Jul 26 13:14:55 2008
+++ ZendEngine2/zend_vm_execute.h	Sat Jul 26 14:09:05 2008
@@ -11112,7 +11112,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 {
@@ -11223,9 +11227,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);
@@ -12940,7 +12954,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 {
@@ -13051,9 +13069,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);
@@ -14815,7 +14843,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 {
@@ -14926,9 +14958,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);
@@ -17306,7 +17348,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 {
@@ -17417,9 +17463,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);
@@ -18531,7 +18587,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 {
@@ -18641,9 +18701,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);
@@ -19602,7 +19672,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 {
@@ -19712,9 +19786,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);
@@ -20673,7 +20757,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 {
@@ -20783,9 +20871,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);
@@ -22013,7 +22111,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 {
@@ -22123,9 +22225,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);
@@ -25141,7 +25253,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 {
@@ -25251,9 +25367,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);
@@ -26847,7 +26973,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 {
@@ -26957,9 +27087,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);
@@ -28599,7 +28739,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 {
@@ -28709,9 +28853,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);
@@ -30855,7 +31009,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 {
@@ -30965,9 +31123,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);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.