Despite Lucee’s Jira asking you to check in the forums before creating a ticket - it is actually their request that you log that the ticket anyway.
Just make sure that you write up as much information as you can.
And if you can - if you were to attach a unit test for the failure - that is especially helpful and oftentimes gets you a faster solution as it means the Lucee team don’t have to write the test and get straight to the testing / troubleshooting stage.
It is quite often the case that you will see a post - much like yours - with a statement along the lines of - "I have logged ticket “XXXX”…
I’ve triaged the ticket, %25 is a % and lucee already automatically decodes the url scope, so you are trying to decode what is strictly a badly encoded url.
The problem is that the fix still throws an exception, which is a problem because that means that any URL param that needs to be decoded has to have it’s own try/catch around it in order to catch this new exception, which previously didn’t exist in Lucee 5 and doesn’t exist in any version of ACF.
In my opinion, urlDecode() should never throw an exception.
Whether or not other problems exist isn’t the issue. The issue is that Lucee 6 introduces a new exception when calling a function that previously never threw an exception (and doesn’t on ACF). Therefore whatever code was used to deal with those problems will never get executed. Even though you could argue that Lucee is doing it more correctly, I’m arguing that it’s a regression in light of all known previous (and current behavior).
I’ve added a third argument strict, which when set to false, falls back on the old lax decoder, which while incomplete, simply strips out and ignores invalid encodings, i.e the old behaviour
I want the improved behavior, but I also don’t want the function to throw an exception. As an alternative to your suggestion, a strict=true could mean to throw an exception as is currently implemented, and strict=false (default) means that if an exception is thrown using the new logic, revert to the old behavior (no exception).