Greetings,

I've identified a somewhat minor but possibly damaging bug in CF 5.  It's pretty 
strange, but true.  Zac Belado has confirmed that this was also the problem in his 
case (see his "Page Processing Twice" message from earlier today).  It seems to only 
affect CF5 (4.5 was also tried) but so far only tested on W2K.

The bug causes a template to be executed twice by the CF engine.  It literally runs 
everything connected to the request twice (all includes, parent template, etc).  There 
is no indication of this unless you have data that is noticeably affected (such as 
inserting DB records).  The HTTP request is not doubled, only the actual CF code 
execution.  This is not browser or Web server-related in any way.

The cause seems to be missing cfoutput tags around a variable call, and apparently 
specifically in an IMG tag (some others were tried with no problems surfacing).  So 
some code like this:

<img src="#variables.someVariable#/test.gif">

(w/out cfoutput tags anywhere around it) will cause double execution.  Wrap it in 
cfoutputs (or in comments) and the problem goes away.

Strange, no?

So strange that I wrote a test for this.  I've pasted my test template below, but if 
your email client makes it unreadable then you can also download a version here 
<http://www.WorldDesign.com/CF/BugTest.cfm.txt>.  Instructions are in the comment. 
I'll also submit this to MM.

Comments welcome.

Cheers,
-Max


BugTest.cfm
-------------------
<!--- 
        This test template demonstrates an apparent bug in ColdFusion v.5 that causes 
a template to be executed twice per request.
        
Run this template and look for a file named BugTestLog.txt in the same folder as the 
template. It should have 2 entries with exact same date/time stamp every time you 
request this template. As you can see there is no HTTP redirection/reload involved and 
the browser only requests the template once (check your web server log to verify).  
There is apparently no way to tell that the execution is happening twice except by 
looking at external events (like the log file double entry in this example).

The cause seems to be missing cfoutput tags around a variable call, and apparently 
specifically in an IMG tag (some others were tried with no problems surfacing).  
Putting cfoutput or CF comment tags around the variable call will solve the issue (try 
it and then check the log file -- you should now only see one time stamp per request).

So far this has only been confirmed on CF5 with Windows 2000.  CF 4.5 on NT4 was also 
tried and did not exhibit this behavior.

[EMAIL PROTECTED]   12/10/01
 --->

<cfset logDir = GetDirectoryFromPath(GetCurrentTemplatePath())>
<cfset logFile = logDir & "BugTestLog.txt">
<cflock timeout="5" throwontimeout="Yes" name="writeTestLogFile" type="EXCLUSIVE">
        <cffile action="APPEND" file="#logFile#" output="Ran at #Now()#" 
addnewline="Yes">
</cflock>
<cfset someVariable = "test">

<!--- the presence of the following line without cfoutput tags 
        around it will cause this template to execute twice --->

<img src="#variables.someVariable#/test.gif">



-----------------------------
Maxim Paperno, CTO
World Design Group, Inc.
[ CF Development and Hosting since 1996 ]
<http://www.WorldDesign.com/>


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Structure your ColdFusion code with Fusebox. Get the official book at 
http://www.fusionauthority.com/bkinfo.cfm
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Archives: http://www.mail-archive.com/cf-talk@houseoffusion.com/
Unsubscribe: http://www.houseoffusion.com/index.cfm?sidebar=lists

Reply via email to