php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #45032 Argument passed as reference to fopen() freezes execution
Submitted: 2008-05-18 11:16 UTC Modified: 2008-05-18 23:04 UTC
From: partner55470745 at aravensoft dot com Assigned:
Status: Not a bug Package: Unknown/Other Function
PHP Version: 5.2.6 OS: Debian Linux 4.0
Private report: No CVE-ID: None
 [2008-05-18 11:16 UTC] partner55470745 at aravensoft dot com
Description:
------------
If an input function argument is passed as a reference (as opposed to as a value) and it is used as an argument to fopen(), parsing and/or execution of the script freezes without ANY warning or error whatsoever.

Reproduce code:
---------------
// This does NOT work (although it shoud)

function log_an_event (&$logfile, &$event)
{
   $f=fopen($logfile, 'a');

   // ...
}

// This is a workaround for the above (first arg not passed as reference)

function log_an_event ($logfile, &$event)
{
   $f=fopen($logfile, 'a');

   // ...
}

Expected result:
----------------
Non-freezing execution.

Actual result:
--------------
Execution of the script freezes/exits without ANY warning or error whatsoever.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2008-05-18 11:50 UTC] felipe@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves. 

A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external 
resources such as databases, etc. If the script requires a 
database to demonstrate the issue, please make sure it creates 
all necessary tables, stored procedures etc.

Please avoid embedding huge scripts into the report.

I can't reproduce.
 [2008-05-18 12:57 UTC] partner55470745 at aravensoft dot com
Well the script itself is included in another script using require(). All files are pure .php scripts (no HTML) executed via browser (not CLI).

MySQL is used in other parts of the scripts, but is not involved here.

PHP Version 5.2.0-8+etch11

This is a shortened but functional version of my reproduce code:

<?php

function logevent (&$logfile, &$logevent)
{
	$f=fopen($logfile, 'a');	
				
	if($f)	
	{
		fputs($f, $logevent);	
		fclose($f);	
		
		return true;
	}
	
	return false;
}

logevent ('/var/logs/somelog.log','somelogevent');

?>
 [2008-05-18 13:05 UTC] felipe@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.2-latest.tar.gz
 
For Windows (zip):
 
  http://snaps.php.net/win32/php5.2-win32-latest.zip

For Windows (installer):

  http://snaps.php.net/win32/php5.2-win32-installer-latest.msi

This last script yields:
"Fatal error: Only variables can be passed by reference"
 [2008-05-18 13:19 UTC] partner55470745 at aravensoft dot com
Hello,

I cannot use the latest snapshot because I only have a production server running the stable Debian. I have no test server, sorry.

However, I didn't know that PHP did not accept a constant string as a parameter passed by reference. That is probably the cause. The only bug I see is any lack of warning/error during the execution. And I used error reporting level (E_ALL).
 [2008-05-18 23:04 UTC] felipe@php.net
.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Sun Jul 13 11:01:33 2025 UTC