Memleak in ereg() and eregi() functions

Bug #48416 Memleak in ereg() and eregi() functions
Submitted: 2009-05-28 16:57 UTC Modified: 2009-05-30 11:55 UTC
From: bmorel at ssi dot fr Assigned:
Status: Closed Package: Regexps related
PHP Version: 5.2.9 OS: CentOS 5.3
Private report: No CVE-ID: None

 [2009-05-28 16:57 UTC] bmorel at ssi dot fr

Description:
------------
When repeating an ereg() or eregi() on different patterns, the memory usage of httpd (or php if executed from the command-line) gets huge (about 1GB for the example below) for the time the script executes, then the memory is freed.
During this time, the memory_get_usage() stays normal, and php's memory limit doesn't trigger.

When repeating the ereg() with the same pattern each time, the memory usage stays normal; this happens only when repeating with a different pattern each time.

Verified on CentOS with PHP 5.2.6 & 5.2.9
Verified on Windows XP with PHP 5.2.8

Reproduce code:
---------------
<?php
for ($i=0;$i<1000000;$i++) ereg("$i","test");
?>

Expected result:
----------------
Memory usage staying low.

Actual result:
--------------
Memory usage as shown by "top -d 1" gets huge.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports

 [2009-05-28 18:17 UTC] bmorel at ssi dot fr

Sorry, same problem with this snapshot (PHP 5.3.0RC3-dev : php5.3-200905281630).

The cache seems to be a good explanation, but it this a good idea ?
I have millions of ereg()s done when I parse huge XML files (several GB), and my memory usage goes too high. I had to replace all my ereg()s with preg_match()s.

Thanks,
Ben

 [2009-05-28 21:58 UTC] scottmac@php.net

This bug has been fixed in CVS.

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/.
 
Thank you for the report, and for helping us make PHP better.

Added a LRU and a cache limit to the ereg code for 5.3.

Give it a few hours and grab another 5.3 snapshot, not sure about fixing this in 5.2. Will check with ilia.

 [2009-05-29 21:39 UTC] bmorel at ssi dot fr

Thanks, but the problem is still there in the latest snapshots.
Just verified it on :

php5.2-200905292030
php5.3-200905292030
php6.0-200905292030

Memory usage still gets so high !
Ben

 [2009-05-29 23:14 UTC] scottmac@php.net

I just downloaded a snapshot of 5.2 to check and its definitely fixed.

Memory peaks at 4mb, you must be doing something wrong.

 [2009-05-30 11:55 UTC] bmorel at ssi dot fr

My mistake, I didn't use the correct php binary.
Successfully checked PHP 5.2, 5.3 and 6.0
Sorry and thank you for your fix !