RE: [PHP-DEV] Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests bug39297.phpt php-src NEWS
| From: | Dmitry Stogov | Date: | Thu, 09 Nov 2006 12:39:38 +0000 |
| Subject: | RE: [PHP-DEV] Re: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests bug39297.phpt php-src NEWS | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-26429@lists.php.net to get a copy of this message | ||
Yes, I know.
My patch didn't remove "Fatal error" behavior, however may be it is
possible.
Dmitry.
> -----Original Message-----
> From: Hannes Magnusson [mailto:hannes.magnusson@gmail.com]
> Sent: Thursday, November 09, 2006 2:17 PM
> To: Dmitry Stogov
> Cc: internals@lists.php.net; Andi Gutmans; Ilia Alshanetsky
> Subject: [PHP-DEV] Re: [ZEND-ENGINE-CVS] cvs:
> ZendEngine2(PHP_5_2) / zend_object_handlers.c /tests
> bug39297.phpt php-src NEWS
>
>
> Hi Dmitry!
> (moved to internal@)
>
> On 11/8/06, Dmitry Stogov <dmitry@zend.com> wrote:
> > Hi,
> >
> > Please pay attention to this patch.
> > It makes overloaded arrays behave in exactly the same way as
> > overloaded objects. It disables indirect modification of overloaded
> > arrays and emits notices.
> It doesn't behave _exactly_ the same way...
>
> <?php
> class foo implements ArrayAccess{
> public $bar;
> public function __get($var) {
> return $this->bar;
> }
> public function offsetGet($var) {
> return $this->bar;
> }
> public function offsetSet($var, $val) {}
> public function offsetExists($offset) {}
> public function offsetUnset($var) {}
> }
>
> $foo = new foo;
> $bar =& $foo->prop;
> $bar =& $foo["prop"];
> PHP Notice: Indirect modification of overloaded property
> foo::$prop has no effect in /usr/src/php/5.2/- on line 16 PHP
> Notice: Indirect modification of overloaded element of foo
> has no effect in /usr/src/php/5.2/- on line 17 PHP Fatal
> error: Objects used as arrays in post/pre
> increment/decrement must return values by reference in
> /usr/src/php/5.2/- on line 17
>
> But I guess this is expected behavior?
>
> -Hannes
> >
> > The patch breaks (adds notice) three tests:
> >
> > test/classes/array_acess_005.phpt test/classes/array_acess_008.phpt
> > test/classes/array_acess_012.phpt
> >
> > Thanks. Dmitry.
> >
> > > -----Original Message-----
> > > From: Dmitry Stogov [mailto:dmitry@php.net]
> > > Sent: Wednesday, November 08, 2006 4:38 PM
> > > To: zend-engine-cvs@lists.php.net
> > > Subject: [ZEND-ENGINE-CVS] cvs: ZendEngine2(PHP_5_2) /
> > > zend_object_handlers.c /tests bug39297.phpt php-src NEWS
> > >
> > >
> > > dmitry Wed Nov 8 13:38:29 2006 UTC
> > >
> > > Added files: (Branch: PHP_5_2)
> > > /ZendEngine2/tests bug39297.phpt
> > >
> > > Modified files:
> > > /php-src NEWS
> > > /ZendEngine2 zend_object_handlers.c
> > > Log:
> > > Fixed bug #39297 (Memory corryption because of indirect
> > > modification of overloaded array).
> > >
> > >
> > >
> > > http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.3
> > > 39&r2=1.2027.2.547.2.340&diff_format=u
> > > Index: php-src/NEWS
> > > diff -u php-src/NEWS:1.2027.2.547.2.339
> > > php-src/NEWS:1.2027.2.547.2.340
> > > --- php-src/NEWS:1.2027.2.547.2.339 Wed Nov 8 11:04:27 2006
> > > +++ php-src/NEWS Wed Nov 8 13:38:28 2006
> > > @@ -30,6 +30,8 @@
> > > an extension INI directive). (wharmby at uk dot ibm dot com,
> > > Dmitry)
> > > - Fixed bug #39320 (ZEND_HASH_APPLY_STOP causes
> deletion). (Marcus)
> > > - Fixed bug #39313 (spl_autoload triggers Fatal error). (Marcus)
> > > +- Fixed bug #39297 (Memory corryption because of indirect
> > > modification
> > > + of overloaded array). (Dmitry)
> > > - Fixed bug #39265 (Fixed path handling inside mod_files.sh).
> > > (michal dot taborsky at gmail dot com, Ilia)
> > > - Fixed bug #39215 (Inappropriate close of stdin/stdout/stderr).
> > > (Wez,Ilia)
> > >
> > > http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_object_handlers
> > > .c?r1=1.135.2.6.2.15&r2=1.135.2.6.2.16&diff_format=u
> > > Index: ZendEngine2/zend_object_handlers.c
> > > diff -u ZendEngine2/zend_object_handlers.c:1.135.2.6.2.15
> > > ZendEngine2/zend_object_handlers.c:1.135.2.6.2.16
> > > --- ZendEngine2/zend_object_handlers.c:1.135.2.6.2.15 Tue Sep 12
> > > 11:01:16 2006
> > > +++ ZendEngine2/zend_object_handlers.c Wed Nov 8
> 13:38:28 2006
> > > @@ -17,7 +17,7 @@
> > >
> > > +-------------------------------------------------------------
> > > ---------+
> > > */
> > >
> > > -/* $Id: zend_object_handlers.c,v 1.135.2.6.2.15
> 2006/09/12 11:01:16
> > > dmitry Exp $ */
> > > +/* $Id: zend_object_handlers.c,v 1.135.2.6.2.16
> 2006/11/08 13:38:28
> > > +dmitry Exp $ */
> > >
> > > #include "zend.h"
> > > #include "zend_globals.h"
> > > @@ -469,6 +469,19 @@
> > > /* Undo PZVAL_LOCK() */
> > > retval->refcount--;
> > >
> > > + if ((type == BP_VAR_W || type == BP_VAR_RW ||
> > > type == BP_VAR_UNSET) && retval->refcount > 0) {
> > > + zval *tmp = retval;
> > > +
> > > + ALLOC_ZVAL(retval);
> > > + *retval = *tmp;
> > > + zval_copy_ctor(retval);
> > > + retval->is_ref = 0;
> > > + retval->refcount = 0;
> > > + if (Z_TYPE_P(retval) != IS_OBJECT) {
> > > + zend_error(E_NOTICE, "Indirect
> > > modification of overloaded element of %s has no effect",
> ce->name);
> > > + }
> > > + }
> > > +
> > > return retval;
> > > } else {
> > > zend_error(E_ERROR, "Cannot use object of
> type %s as
> > > array", ce->name);
> > >
> > >
> > > http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/bug39297.phpt?
> > view=markup&rev=1.1
> > Index: ZendEngine2/tests/bug39297.phpt
> > +++ ZendEngine2/tests/bug39297.phpt
> >
> > --
> > Zend Engine CVS Mailing List (http://cvs.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> > --
> > Zend Engine CVS Mailing List (http://cvs.php.net/)
> > To unsubscribe, visit: http://www.php.net/unsub.php
> >
> >
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: http://www.php.net/unsub.php
>