ID: 33931
Updated by: [EMAIL PROTECTED]
Reported By: wkonkel at gmail dot com
-Status: Verified
+Status: Assigned
Bug Type: Scripting Engine problem
Operating System: *
PHP Version: 5CVS-2005-07-31
-Assigned To:
+Assigned To: dmitry
New Comment:
Dmitry, could you check it plz ?
Previous Comments:
------------------------------------------------------------------------
[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