#19269 [Fbk->Csd]: PEAR.php - memory eating bug
| From: | mj@php.net | 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