php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #67111 Memory leak when using "continue 2" inside two foreach loops
Submitted: 2014-04-22 23:01 UTC Modified: 2014-06-19 17:51 UTC
Votes:4
Avg. Score:5.0 ± 0.0
Reproduced:4 of 4 (100.0%)
Same Version:3 (75.0%)
Same OS:1 (25.0%)
From: thilo at eightysoft dot de Assigned:
Status: Closed Package: opcache
PHP Version: 5.5.11 OS: Debian Jessie, Linux 3.13
Private report: No CVE-ID:
 [2014-04-22 23:01 UTC] thilo at eightysoft dot de
Description:
------------
When using the short example script below, the script dies from memory consumption going too high.
Every "continue 2" statement seems to leak 8MB of memory in this example.
The amount of memory being leaked depends on the number of elements in the $data array. Fewer elements --> smaller amount of memory being leaked.

Test script:
---------------
<?php
$data=array();
for($c=0; $c<32768; $c++)
    $data[$c]=array(1, 2, 3);
$filter=array(1, 2, 3);

for($kc=0; $kc<25600; $kc++)
{
    $cm=memory_get_usage(true);
    $pm=memory_get_peak_usage(true);
    echo "<b>loop $kc: current_memory: $cm, peak_memory: $pm...</b><br>";
    flush();

    foreach($data as $entry)
        foreach($filter as $pattern)
            continue 2;
}
?>

Expected result:
----------------
I expect to see the script running till $kc in the outer for loop reaches 25600 and then terminate.
The consumed memory should stay (nearly?) constant throughout the script execution.

Actual result:
--------------
loop 0: current_memory: 12582912, peak_memory: 12582912...
loop 1: current_memory: 20709376, peak_memory: 20709376...
loop 2: current_memory: 28835840, peak_memory: 28835840...
loop 3: current_memory: 36962304, peak_memory: 36962304...
loop 4: current_memory: 45088768, peak_memory: 45088768...
loop 5: current_memory: 53215232, peak_memory: 53215232...
loop 6: current_memory: 61341696, peak_memory: 61341696...
loop 7: current_memory: 69468160, peak_memory: 69468160...
loop 8: current_memory: 77594624, peak_memory: 77594624...
loop 9: current_memory: 85721088, peak_memory: 85721088...
loop 10: current_memory: 93847552, peak_memory: 93847552...
loop 11: current_memory: 101974016, peak_memory: 101974016...
loop 12: current_memory: 110100480, peak_memory: 110100480...
loop 13: current_memory: 118226944, peak_memory: 118226944...
loop 14: current_memory: 126353408, peak_memory: 126353408...
loop 15: current_memory: 134479872, peak_memory: 134479872...
loop 16: current_memory: 142606336, peak_memory: 142606336...
loop 17: current_memory: 151257088, peak_memory: 151257088...
loop 18: current_memory: 159383552, peak_memory: 159383552...
loop 19: current_memory: 167510016, peak_memory: 167510016...
loop 20: current_memory: 175636480, peak_memory: 175636480...
loop 21: current_memory: 183762944, peak_memory: 183762944...
loop 22: current_memory: 191889408, peak_memory: 191889408...
loop 23: current_memory: 200015872, peak_memory: 200015872...
loop 24: current_memory: 208142336, peak_memory: 208142336...
loop 25: current_memory: 216268800, peak_memory: 216268800...
loop 26: current_memory: 224395264, peak_memory: 224395264...
loop 27: current_memory: 232521728, peak_memory: 232521728...
loop 28: current_memory: 240648192, peak_memory: 240648192...
loop 29: current_memory: 248774656, peak_memory: 248774656...
loop 30: current_memory: 256901120, peak_memory: 256901120...
loop 31: current_memory: 265027584, peak_memory: 265027584...
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 40 bytes) in 

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2014-06-19 14:33 UTC] arjen at react dot com
This only happens with Zend Opcache enabled.

To reproduce on CLI, make sure to set opcache.enable_cli=1, i.e.
php -dopcache.enable_cli=1 script.php
 [2014-06-19 17:51 UTC] aharvey@php.net
-Package: Scripting Engine problem +Package: opcache
 [2014-12-19 20:53 UTC] nikic@php.net
Automatic comment on behalf of nikic
Revision: http://git.php.net/?p=php-src.git;a=commit;h=aa394e70ff8cda63ee4382d2488d80936e5122dc
Log: Fix bug #67111
 [2014-12-19 20:53 UTC] nikic@php.net
-Status: Open +Status: Closed
 
PHP Copyright © 2001-2017 The PHP Group
All rights reserved.
Last updated: Mon Jul 24 18:01:37 2017 UTC