ID: 39105 User updated by: ivoras at yahoo dot com Reported By: ivoras at yahoo dot com -Status: Feedback +Status: Open Bug Type: Filesystem function related Operating System: FreeBSD -PHP Version: 5.1.6 +PHP Version: 5.2 New Comment:
The recent feedback got me thinking - I use a template extensions.ini (list of extensions) on all my systems and when I remove it the leak is gone. Thus, I managed to reproduce the leek because the loaded extensions are the same on every system. There's a known php-crashing bug with PHP (at least versions 5.1 and 5.2) on FreeBSD that's got something to do with the order extensions are loaded, so this might be an aspect of it. My list is: extension=bz2.so extension=session.so extension=mhash.so extension=zlib.so extension=mbstring.so extension=sockets.so extension=mcrypt.so extension=pcre.so extension=simplexml.so extension=xml.so extension=apc.so extension=sqlite.so extension=memcache.so extension=dom.so extension=iconv.so extension=mysql.so extension=gd.so extension=pgsql.so extension=ldap.so extension=tokenizer.so I'll try fiddling with the order of extensions and report results. Previous Comments: ------------------------------------------------------------------------ [2006-12-06 14:59:38] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip Cannot reproduce anything like that both on Freebsd & Linux. ------------------------------------------------------------------------ [2006-12-06 14:35:34] ivoras at yahoo dot com Tried 6.2-release with same results. It looks like it happens when including files with require_once. Error message: > php b.php [Wed Dec 6 15:18:51 2006] Script: 'b.php' /usr/ports/lang/php5/work/php-5.2.0/main/main.c(1729) : Freeing 0x0861FAFC (40 bytes), script=b.php [Wed Dec 6 15:18:51 2006] Script: 'b.php' /usr/ports/lang/php5/work/php-5.2.0/main/fopen_wrappers.c(543) : Freeing 0x0861FB48 (40 bytes), script=b.php The example script, "b.php" is: <?php require_once('a.php'); class B extends A { function __construct($par) { echo "Hello from B constructor\n"; } } ?> a.php is: <?php class A { function __construct($param) { echo "A::constructor"; } } ?> The code for main.c (part of PHP interpreter) is: 1717 /* Only lookup the real file path and add it to the included_files list if already opened 1718 * otherwise it will get opened and added to the included_files list in zend_execute_scripts 1719 */ 1720 if (primary_file->filename && 1721 primary_file->opened_path == NULL && 1722 primary_file->type != ZEND_HANDLE_FILENAME) { 1723 int realfile_len; 1724 int dummy = 1; 1725 1726 if (expand_filepath(primary_file->filename, realfile TSRMLS_CC)) { 1727 realfile_len = strlen(realfile); 1728 zend_hash_add(&EG(included_files), realfile, realfile_len+1, (void *)&dummy, sizeof(int), NULL); 1729 primary_file->opened_path = estrndup(realfile, realfile_len); 1730 } 1731 } The code for fopen_wrappers is: 513 /* {{{ expand_filepath 514 */ 515 PHPAPI char *expand_filepath(const char *filepath, char *real_path TSRMLS_DC) 516 { 517 cwd_state new_state; 518 char cwd[MAXPATHLEN]; 519 char *result; 520 521 if (IS_ABSOLUTE_PATH(filepath, strlen(filepath))) { 522 cwd[0] = '\0'; 523 } else{ 524 result = VCWD_GETCWD(cwd, MAXPATHLEN); 525 if (!result) { 526 cwd[0] = '\0'; 527 } 528 } 529 530 new_state.cwd = strdup(cwd); 531 new_state.cwd_length = strlen(cwd); 532 533 if(virtual_file_ex(&new_state, filepath, NULL, 1)) { 534 free(new_state.cwd); 535 return NULL; 536 } 537 538 if(real_path) { 539 int copy_len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length; 540 memcpy(real_path, new_state.cwd, copy_len); 541 real_path[copy_len]='\0'; 542 } else { 543 real_path = estrndup(new_state.cwd, new_state.cwd_length); 544 } 545 free(new_state.cwd); 546 547 return real_path; 548 } 549 /* }}} */ ------------------------------------------------------------------------ [2006-10-18 01:00:00] php-bugs at lists dot php dot net No feedback was provided for this bug for over a week, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". ------------------------------------------------------------------------ [2006-10-10 10:45:27] [EMAIL PROTECTED] Please try using this CVS snapshot: http://snaps.php.net/php5.2-latest.tar.gz For Windows: http://snaps.php.net/win32/php5.2-win32-latest.zip ------------------------------------------------------------------------ [2006-10-10 10:15:13] ivoras at yahoo dot com Description: ------------ PHP compiled with debugging reports memory leaks. It technically really IS a memory leak in the script code, but should that influence the scripting engine? Reproduce code: --------------- <?php $f = fopen('aaa', 'w+'); fwrite($f, "bcde\n"); ?> Expected result: ---------------- A working program Actual result: -------------- [Tue Oct 10 12:10:55 2006] Script: 'bla.php' /usr/ports/lang/php5/work/php-5.1.6/main/main.c(1708) : Freeing 0x085ACCA4 (26 bytes), script=bla.php === Total 1 memory leaks detected === ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39105&edit=1