php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #81361 memory leak with anonymous function in an eval statement
Submitted: 2021-08-14 22:36 UTC Modified: 2021-08-16 10:21 UTC
From: zelnaga at gmail dot com Assigned:
Status: Duplicate Package: Performance problem
PHP Version: 8.0.9 OS: any
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: zelnaga at gmail dot com
New email:
PHP Version: OS:

 

 [2021-08-14 22:36 UTC] zelnaga at gmail dot com
Description:
------------
eval('return function() {};') seems to create a memory leak.

If I replace eval('return function() {};'); with function() {}; there's no memory leak but if I replace eval('return function() {};'); with $a = eval('return function() {};'); unset($a); there is still. So it's like the eval() is what's causing the issue.

Per https://3v4l.org/3p4sl apparently this code didn't start leaking until PHP 7.4.

Test script:
---------------
<?php
while (true) {
    eval('return function() {};');
    gc_collect_cycles();
    $new = memory_get_usage();
    if (isset($old)) {
        echo ($new - $old) . "\n";
    }
    $old = $new;
}
?>

Expected result:
----------------
I would expect this to output a bunch of 0's, one after the other.

Actual result:
--------------
432 is output over and over and over again, indicating that each new pass is consuming an additional 432 bytes than the last one.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2021-08-16 10:21 UTC] nikic@php.net
-Status: Open +Status: Duplicate
 [2021-08-16 10:21 UTC] nikic@php.net
Duplicate of bug #76982.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Nov 22 22:01:30 2024 UTC