Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_3) / zend_object_handlers.c /tests bug48248.phpt

[email protected] (Jani Taskinen) Wed, 13 May 2009 02:38:02 +0300
Newsgroups php.zend-engine.cvs
Message-ID <[email protected]>
The code crashes also in PHP_5_2, so please MFH there too.

--Jani


Felipe Pena kirjoitti:
> felipe		Tue May 12 22:55:06 2009 UTC
> 
>   Added files:                 (Branch: PHP_5_3)
>     /ZendEngine2/tests	bug48248.phpt 
> 
>   Modified files:              
>     /ZendEngine2	zend_object_handlers.c 
>   Log:
>   - MFH: Fixed bug #48248 (SIGSEGV when access to private property via &__get)
>   
> http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers.c?r1=1.135.2.6.2.22.2.26&r2=1.135.2.6.2.22.2.27&diff_format=u
> Index: ZendEngine2/zend_object_handlers.c
> diff -u ZendEngine2/zend_object_handlers.c:1.135.2.6.2.22.2.26 ZendEngine2/zend_object_handlers.c:1.135.2.6.2.22.2.27
> --- ZendEngine2/zend_object_handlers.c:1.135.2.6.2.22.2.26	Wed Jan 14 10:28:22 2009
> +++ ZendEngine2/zend_object_handlers.c	Tue May 12 22:55:05 2009
> @@ -17,7 +17,7 @@
>     +----------------------------------------------------------------------+
>  */
>  
> -/* $Id: zend_object_handlers.c,v 1.135.2.6.2.22.2.26 2009/01/14 10:28:22 dmitry Exp $ */
> +/* $Id: zend_object_handlers.c,v 1.135.2.6.2.22.2.27 2009/05/12 22:55:05 felipe Exp $ */
>  
>  #include "zend.h"
>  #include "zend_globals.h"
> @@ -578,8 +578,8 @@
>  		zend_guard *guard;
>  
>  		if (!zobj->ce->__get ||
> -		    zend_get_property_guard(zobj, property_info, member, &guard) != SUCCESS ||
> -		    guard->in_get) {
> +			zend_get_property_guard(zobj, property_info, member, &guard) != SUCCESS ||
> +			(property_info && guard->in_get)) {
>  			/* we don't have access controls - will just add it */
>  			new_zval = &EG(uninitialized_zval);
>  
> 
> http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug48248.phpt?view=markup&rev=1.1
> Index: ZendEngine2/tests/bug48248.phpt
> +++ ZendEngine2/tests/bug48248.phpt
> --TEST--
> Bug #48248 (SIGSEGV when access to private property via &__get)
> --FILE--
> <?php
> 
> class A
> {
>     public function & __get($name)
>     {
>         return $this->test;
>     }
> }
> 
> class B extends A
> {
>     private $test;
> }
> 
> $b = new B;
> var_dump($b->test);
> 
> ?>
> --EXPECTF--
> Notice: Undefined property: B::$test in %s on line %d
> 
> Notice: Only variable references should be returned by reference in %s on line %d
> NULL
> 
> 
>