#19269 [Fbk->Csd]: PEAR.php - memory eating bug

From: Date: Wed, 25 Sep 2002 17:41:53 +0000
Subject: #19269 [Fbk->Csd]: PEAR.php - memory eating bug
References: 1  Groups: php.pear.dev 
Request: Send a blank email to pear-dev+get-9495@lists.php.net to get a copy of this message
ID: 19269 Updated by: mj@php.net Reported By: wolfram@kriesing.de -Status: Feedback +Status: Closed Bug Type: PEAR related Operating System: Any PHP Version: 4CVS-2002-09-06 New Comment: This bug has been fixed in CVS. In case this was a PHP problem, snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. In case this was a documentation problem, the fix will show up soon at http://www.php.net/manual/. In case this was a PHP.net website problem, the change will show up on the PHP.net site and on the mirror sites in short time. Thank you for the report, and for helping us make PHP better. Previous Comments: ------------------------------------------------------------------------ [2002-09-24 17:44:54] jrust@rustyparts.com This solution works. It just takes off the extra error mode after we're done using it. --- PEAR2.php Tue Sep 24 15:33:18 2002 +++ PEAR.php Tue Sep 24 15:35:24 2002 @@ -583,6 +583,7 @@ $stack = &$GLOBALS['_PEAR_error_handler_stack']; array_pop($stack); list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); if (isset($this)) { $this->setErrorHandling($mode, $options); } else { ------------------------------------------------------------------------ [2002-09-18 11:52:55] jrust@rustyparts.com The problem with that solution is that if pushErrorHandling() has been called only once before popErrorHandling then after both array_pops are done there is nothing left in the stack to do list() on and thus the following error occurs: NOTICE (0x08) in /usr/share/php-pear/PEAR.php on line 492 Undefined offset: 0 Maybe the list() part should be done before the 2nd array_pop? Or is there a need for always putting both the default mode and the passed in mode onto the stack? ------------------------------------------------------------------------ [2002-09-18 10:19:41] mj@php.net Could you please try if the following patch (untested) works for you? Index: PEAR.php =================================================================== RCS file: /repository/php4/pear/PEAR.php,v retrieving revision 1.47 diff -u -r1.47 PEAR.php --- PEAR.php 21 Jul 2002 07:04:45 -0000 1.47 +++ PEAR.php 18 Sep 2002 15:15:50 -0000 @@ -582,7 +582,8 @@ { $stack = &$GLOBALS['_PEAR_error_handler_stack']; array_pop($stack); - list($mode, $options) = $stack[sizeof($stack) - 1]; + array_pop($stack); + list($mode, $options) = $stack[sizeof($stack)]; if (isset($this)) { $this->setErrorHandling($mode, $options); } else { ------------------------------------------------------------------------ [2002-09-06 13:53:43] wolfram@kriesing.de i am working on a big import script and just for fun i checked the size of $GLOBALS on every turn, and i realized it grew constantly, i found out that pushErrorHandling pushes 2 elements on the array _PEAR_error_handler_stack, but popErrorHandling pop's only one off the array, so it grows on every use! and since those are used in DB/mysql.php and File/CSV.php my memory limit comes closer with every run through the while-loop ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=19269&edit=1

« previous php.pear.dev (#9495) next »