ID:               33931
 Updated by:       [EMAIL PROTECTED]
 Reported By:      wkonkel at gmail dot com
-Status:           Assigned
+Status:           Feedback
 Bug Type:         Scripting Engine problem
 Operating System: *
 PHP Version:      5CVS-2005-08-19
 Assigned To:      dmitry
 New Comment:

Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip

I'm unable to replicate it anymore.


Previous Comments:
------------------------------------------------------------------------

[2005-08-01 09:51:38] [EMAIL PROTECTED]

Dmitry, could you check it plz ?

------------------------------------------------------------------------

[2005-07-31 20:01:33] [EMAIL PROTECTED]

And this with Sean's code:

PHP Notice:  Undefined property:  A::$foo in /home/jani/t.php on line
8

Notice: Undefined property:  A::$foo in /home/jani/t.php on line 8
PHP Notice:  Undefined property:  A::$foo in /home/jani/t.php on line
9

Notice: Undefined property:  A::$foo in /home/jani/t.php on line 9
PHP Notice:  Undefined variable: undefined in /home/jani/t.php on line
10

Notice: Undefined variable: undefined in /home/jani/t.php on line 10
NULL
array(2) {
  ["bar1"]=>
  string(5) "oink1"
  [0]=>
  string(4) "blah"
}
/usr/src/php/php5/Zend/zend_variables.h(45) :  Freeing 0x088ED84C (6
bytes), script=t.php
/usr/src/php/php5/Zend/zend_variables.c(120) : Actual location
(location was relayed)
Last leak repeated 1 time
/usr/src/php/php5/Zend/zend_execute.c(798) :  Freeing 0x088ED80C (16
bytes), script=t.php
Last leak repeated 1 time
/usr/src/php/php5/Zend/zend_hash.c(242) :  Freeing 0x088ED7B4 (40
bytes), script=t.php
Last leak repeated 1 time
/usr/src/php/php5/Zend/zend_execute.c(1031) :  Freeing 0x088ED754 (44
bytes), script=t.php
/usr/src/php/php5/Zend/zend_API.c(712) : Actual location (location was
relayed)
Last leak repeated 3 times
/usr/src/php/php5/Zend/zend_execute.c(1028) :  Freeing 0x088DE7CC (16
bytes), script=t.php
=== Total 11 memory leaks detected ===


------------------------------------------------------------------------

[2005-07-31 20:00:32] [EMAIL PROTECTED]

Output with CVS HEAD:

Array
(
    [foo2] => bar2
    [foo3] => bar3
    [0] => blah
)
/usr/src/php/php5/Zend/zend_hash.c(242) :  Freeing 0x088EF6FC (40
bytes), script=t.php
Last leak repeated 2 times
/usr/src/php/php5/Zend/zend_variables.h(45) :  Freeing 0x088EF664 (5
bytes), script=t.php
/usr/src/php/php5/Zend/zend_variables.c(120) : Actual location
(location was relayed)
Last leak repeated 2 times
/usr/src/php/php5/Zend/zend_execute.c(798) :  Freeing 0x088EF624 (16
bytes), script=t.php
Last leak repeated 2 times
/usr/src/php/php5/Zend/zend_execute.c(1031) :  Freeing 0x088EF56C (44
bytes), script=t.php
/usr/src/php/php5/Zend/zend_API.c(712) : Actual location (location was
relayed)
Last leak repeated 3 times
/usr/src/php/php5/Zend/zend_execute.c(1028) :  Freeing 0x088DE7CC (16
bytes), script=t.php
=== Total 14 memory leaks detected ===


------------------------------------------------------------------------

[2005-07-30 23:52:13] [EMAIL PROTECTED]

Happens to me on 5.0.3 as well.

Shorter code:
<?php
class A {
  public function __set($key, $val) {
    $this->data[$key] = $val;
  }
}
$A = new A();
$A->foo['bar'] = 'oink';
$A->foo['bar1'] = 'oink1';
var_dump($undefined);
$undefined[] = 'blah';
var_dump($undefined);
?>

Outputs:
NULL
array(2) {
  ["bar1"]=>
  string(5) "oink1"
  [0]=>
  string(4) "blah"
}


------------------------------------------------------------------------

[2005-07-30 22:39:55] wkonkel at gmail dot com

Description:
------------
The __set and __get don't seem to handle arrays correctly.  What's even
worse, is it adds data to memory which is allocated at a later time
($boz gets foo2 and foo3 of $myObj).  The code example speaks for
itself.  

Reproduce code:
---------------
<?

class buggy {
        private $data;
        function __set($key, $val) {
                $this->data[$key] = $val;
        }
        function __get($key) {
                return $this->data[$key];
        }
}

$myObj = new buggy();
$myObj->somevar['foo1'] = 'bar1';
$myObj->somevar['foo2'] = 'bar2';
$myObj->somevar['foo3'] = 'bar3';

$boz[] = 'blah';
print_r($boz);

?>

Expected result:
----------------
Array
(
    [0] => blah
)

Actual result:
--------------
Array
(
    [foo2] => bar2
    [foo3] => bar3
    [0] => blah
)


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=33931&edit=1

Reply via email to