Avoid ColdFusion Scope Names as Arguments

This post is more than 2 years old.

This question came in this morning. Looking at the code below, see if you can determine the issue. (Of course, the title of the blog entry is a bit of a give away.)

<cffunction name="onRequestStart" returntype="boolean" access="public"> <cfargument name="url" required="true" type="string"> <cfif StructKeyExists(url, "init")> <cfset onSessionStart()> </cfif> <cfreturn true> </cffunction>

This is a fairly simple onRequestStart - and one based on a pattern I use quite a bit - specifically the init URL hook to restart something (normally the Application, but in this case the Session). When run, this gives the following error:

You have attempted to dereference a scalar variable of type class java.lang.String as a structure with members.

So what's the issue? By accident, the user named the argument to onRequestStart the same as one of ColdFusion's built-in scopes. By telling ColdFusion to pass the requested page as "url", it blew away the URL scope. Instead of a structure, URL was now a simple string.

Easy enough mistake to make - and I swear I looked at it for five minutes before I noticed it.

Raymond Camden's Picture

About Raymond Camden

Raymond is a developer advocate for HERE Technologies. He focuses on JavaScript, serverless and enterprise cat demos. If you like this article, please consider visiting my Amazon Wishlist or donating via PayPal to show your support. You can even buy me a coffee!

Lafayette, LA https://www.raymondcamden.com