isNull() does not match ACF behavior with local scope

Description

I've noticed a difference between ACF and Lucee when the "Null Support" option is set to "Partial Support (CFML Default)".

When isNull() is invoked on a local variable, ACF will return false if there is a local variable that's value is null where as Lucee will check the entire scope for the value.

For example:

In the above example, if you were to run the testNull() method, Lucee will return false where as ACF will return true. This appears to be because in ACF isNull() will check the local scope first to see if there's a variable defined and stop checking the scope tree. However, Lucee will find that variables.type is defined so will return false.

I've put together a little example that you can run in CommandBox that will show the behavior:

NOTE — If you try to output the value for type (when unscoped) it will print the value of the type property in both ACF & Lucee (the output of the above test will illustrate this).

If you set the "Null Support" option to "Complete Support", then isNull() behaves as expected. However, this has lots of other side effects (such as database queries returning null values instead of empty strings).

Environment

Tomcat 9/CentOS 7/Apache 2.4

Assignee

Unassigned

Reporter

Dan Switzer, II

Priority

Critical

Fix versions

None

Affects versions

Configure