100% Geek The Adventures of Peter Boughton:
CFML; Web Development; Photography.


expandPath bug in CF8

I've just encountered a very annoying bug with the expandPath function in CF8.

Take the following code:
<cfset MyDir = "."/>

<cfloop index="i" from="1" to="5">
<cfset MyDir = expandPath(MyDir)/>
<cfoutput><br/>#MyDir#</cfoutput>
</cfloop>


Run the code through Railo and you will get exactly the right behaviour, with the current directory output five times:
C:\dev\scratch
C:\dev\scratch
C:\dev\scratch
C:\dev\scratch
C:\dev\scratch


Now go run the same code with CF8 - and this is what you get:
F:\ColdFusion8\wwwroot\scratch
F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch\F:\ColdFusion8\wwwroot\scratch


It simply stacks the current directory onto the front each time. Very frustrating.


In order to get round this, I created a regular expression to pull off the last value of any directory containing more than one colon - this will work for Windows machines, but may need to be changed for Linux or MacOSX machines (if the bug affects these).

<cfif isDefined('Server.ColdFusion.ProductName')
AND Server.ColdFusion.ProductName EQ 'ColdFusion Server'
AND ListLen( MyDir ,':') GT 2>
<cfset MyDir = REreplace( MyDir , "^.*([A-Z]:[^:]+)$" , "\1" )/>
</cfif>


Posted by Peter on 16-August-2008 at 17:23 ~ Category:


Comments

Weird - Write the same code using cfscript and it behaves properly.
James Netherton @ 10:47 17-August-2008

Odd.

It still doesn't work in cfscript for me.

I tried it with the following:
<cfscript>
MyDir = ".";

for ( i=1 ; i LTE 5 ; i=i+1 )
{
MyDir = expandPath(MyDir);
WriteOutput("<br/>#MyDir#");
}
</cfscript>
Peter @ 12:44 17-August-2008

Doh! Ignore me, I wasn't assigning MyDir to the result returned by expandpath in the loop.

Yep, it's a bug :)
James Netherton @ 16:02 17-August-2008


:

:
: