cvs: ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests bug46308.phpt php-src NEWS

[email protected] ("Dmitry Stogov")
Newsgroups php.zend-engine.cvs
Message-ID <cvsdmitry1224239156@cvsserver>
dmitry		Fri Oct 17 10:25:56 2008 UTC

  Added files:                 (Branch: PHP_5_2)
    /ZendEngine2/tests	bug46308.phpt 

  Modified files:              
    /php-src	NEWS 
    /ZendEngine2	zend_object_handlers.c 
  Log:
  Fixed bug #46308 (Invalid write when changing property from inside getter)
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.1262&r2=1.2027.2.547.2.1263&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.1262 php-src/NEWS:1.2027.2.547.2.1263
--- php-src/NEWS:1.2027.2.547.2.1262	Fri Oct 17 01:32:59 2008
+++ php-src/NEWS	Fri Oct 17 10:25:56 2008
@@ -3,6 +3,8 @@
 ?? Oct 2008, PHP 5.2.7RC2
 - Fixed bug #46319 (PHP sets default Content-Type header for HTTP 304
   response code, in cgi sapi). (Ilia)
+- Fixed bug #46308 (Invalid write when changing property from inside getter).
+  (Dmitry)
 - Fixed bug #46292 (PDO::setFetchMode() shouldn't requires the 2nd arg when 
   using FETCH_CLASSTYPE). (Felipe)
 - Fixed bug #46274, #46249 (pdo_pgsql always fill in NULL for empty BLOB and 
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.135.2.6.2.28&r2=1.135.2.6.2.29&diff_format=u
Index: ZendEngine2/zend_object_handlers.c
diff -u ZendEngine2/zend_object_handlers.c:1.135.2.6.2.28 ZendEngine2/zend_object_handlers.c:1.135.2.6.2.29
--- ZendEngine2/zend_object_handlers.c:1.135.2.6.2.28	Thu Feb 21 13:55:22 2008
+++ ZendEngine2/zend_object_handlers.c	Fri Oct 17 10:25:56 2008
@@ -17,7 +17,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_object_handlers.c,v 1.135.2.6.2.28 2008/02/21 13:55:22 dmitry Exp $ */
+/* $Id: zend_object_handlers.c,v 1.135.2.6.2.29 2008/10/17 10:25:56 dmitry Exp $ */
 
 #include "zend.h"
 #include "zend_globals.h"
@@ -328,6 +328,7 @@
 		    zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
 		    !guard->in_get) {
 			/* have getter - try with it! */
+			ZVAL_ADDREF(object);
 			guard->in_get = 1; /* prevent circular getting */
 			rv = zend_std_call_getter(object, member TSRMLS_CC);
 			guard->in_get = 0;
@@ -352,6 +353,7 @@
 			} else {
 				retval = &EG(uninitialized_zval_ptr);
 			}
+			zval_ptr_dtor(&object);
 		} else {
 			if (!silent) {
 				zend_error(E_NOTICE,"Undefined property: %s::$%s", zobj->ce->name, Z_STRVAL_P(member));
@@ -422,12 +424,14 @@
 		if (zobj->ce->__set &&
 		    zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
 		    !guard->in_set) {
+			ZVAL_ADDREF(object);
 			guard->in_set = 1; /* prevent circular setting */
 			if (zend_std_call_setter(object, member, value TSRMLS_CC) != SUCCESS) {
 				/* for now, just ignore it - __set should take care of warnings, etc. */
 			}
 			setter_done = 1;
 			guard->in_set = 0;
+			zval_ptr_dtor(&object);
 		}
 		if (!setter_done && property_info) {
 			zval **foo;
@@ -602,9 +606,11 @@
 		    zend_get_property_guard(zobj, property_info, member, &guard) == SUCCESS &&
 		    !guard->in_unset) {
 			/* have unseter - try with it! */
+			ZVAL_ADDREF(object);
 			guard->in_unset = 1; /* prevent circular unsetting */
 			zend_std_call_unsetter(object, member TSRMLS_CC);
 			guard->in_unset = 0;
+			zval_ptr_dtor(&object);
 		}
 	}
 
@@ -1020,6 +1026,7 @@
 			zval *rv;
 
 			/* have issetter - try with it! */
+			ZVAL_ADDREF(object);
 			guard->in_isset = 1; /* prevent circular getting */
 			rv = zend_std_call_issetter(object, member TSRMLS_CC);
 			if (rv) {
@@ -1037,6 +1044,7 @@
 				}
 			}
 			guard->in_isset = 0;
+			zval_ptr_dtor(&object);
 		}
 	} else {
 		switch (has_set_exists) {

http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug46308.phpt?view=markup&rev=1.1
Index: ZendEngine2/tests/bug46308.phpt
+++ ZendEngine2/tests/bug46308.phpt
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.