php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #58761 Memory leak when using include/include_once
Submitted: 2009-07-13 07:32 UTC Modified: 2009-11-29 14:44 UTC
From: sg at efficientip dot com Assigned:
Status: Closed Package: bcompiler (PECL)
PHP Version: 5.2.9 OS: FreeBSD 6.4
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 this is not your bug, you can add a comment by following this link.
If this is your bug, but you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: sg at efficientip dot com
New email:
PHP Version: OS:

 

 [2009-07-13 07:32 UTC] sg at efficientip dot com
Description:
------------
When using include/include_once, a memory leak occur.

Reproduce code:
---------------
* Compile PHP with --enable-debug flag
* Use a PHP file with includes.

test.php:

<?php
include 'test.inc';
?>

test.inc:
<?php
?>


The following patch remove the leak:
*** bcompiler.c Wed Oct  4 10:45:28 2006
--- bcompiler.c.modif   Sun Jul 12 00:06:37 2009
***************
*** 306,317 ****
               char *path_to_open;
       unsigned char magic[2];
       static int has_gz = -1, has_bz = -1;

       if (has_gz == -1) has_gz = has_gzip_stream_support(TSRMLS_C);
       if (has_bz == -1) has_bz = has_bzip2_stream_support(TSRMLS_C);

       /* try to read magic */
!       stream = php_stream_open_wrapper(file_name, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|STREAM_OPEN_FOR_INCLUDE, opened_path);
       if (!stream) {
               BCOMPILER_DEBUG(("error opening file '%s'..\n", file_name));
               return stream;
--- 306,320 ----
               char *path_to_open;
       unsigned char magic[2];
       static int has_gz = -1, has_bz = -1;
+       char    *local_opened_path = NULL;

       if (has_gz == -1) has_gz = has_gzip_stream_support(TSRMLS_C);
       if (has_bz == -1) has_bz = has_bzip2_stream_support(TSRMLS_C);

       /* try to read magic */
!       stream = php_stream_open_wrapper(file_name, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|STREAM_OPEN_FOR_INCLUDE, &local_opened_path);
!       if  (local_opened_path)
!               efree(local_opened_path);
       if (!stream) {
               BCOMPILER_DEBUG(("error opening file '%s'..\n", file_name));
               return stream;




Expected result:
----------------
No memory leak

Actual result:
--------------
when starting test.php:

/usr/freebsd-current/php-5.2.9/main/fopen_wrappers.c(668) :  Freeing 0x28C32B4C (11 bytes), script=/tmp/t.php


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-11-29 14:44 UTC] val@php.net
This bug has been fixed in CVS.

In case this was a documentation problem, the fix will show up at the
end of next Sunday (CET) on pecl.php.net.

In case this was a pecl.php.net website problem, the change will show
up on the website in short time.
 
Thank you for the report, and for helping us make PECL better.


 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Apr 20 12:01:28 2024 UTC