Cfdump not rendering when output=false

New install of 5.2.6.59 on Windows 10 with IIS.

Application.cfc

<cfcomponent>

	<cffunction name="onRequestStart">
		<cfset test = CreateObject("component", "test")>
		<cfset test.run()>
	</cffunction>

</cfcomponent>

Test.cfc

<cfcomponent>
	
	<cffunction name="run" output="false">
		<cfdump var="some output" abort="true" />
	</cffunction>

</cfcomponent>

On all previous Lucee installs I’ve used I would see “some output” rendered. This one I see nothing. If I remove output=“false” then I see the dump output as usual.

This is new behaviour to me, is it expected?

Latest snapshot (5.2.7.29) has same issue

alas, it’s a breaking change with really confusing behavior which was accidentally rolled
out in the release 5.2.69 :roll_eyes:

https://lucee.daemonite.io/t/missing-output-since-5-2-6-36-snapshot/3489/10

Thanks for the update

@Andy I wasted many hours trying to figure out why I couldn’t dump/abort in my cfwheels app anymore after upgrading to 5.2.6.59. After a chain of asking Tom K who led me to Brad in Lucee Slack who led me to Zac over here I had my answer. Thanks Zac!
I just added this.bufferOutput = true; right in app.cfm and back to normal. I read they did this for compatibility but I don’t understand why Adobe or Lucee wants this behavior by default in the first place.

1 Like

@Risto1 The reason the behavior is desirable to the CF engine is a performance increase from not tracking all whitespace and other output from inside of every function. Large apps with lots of CFCs or a framework can accumulate quite a bit of output coming from tag functions especially, and it’s all discarded if output=false. However, the engines are forced to collect and append those strings in the background on the 0.01% you decide to dump/abort the request. It’s faster if the CF engine can not even gather output at all from the function, but that also means if you decide to abort in an output=false function, then anything you’ve dumped would have been ignored. So technically, it’s also correct that you should be able to dump anything out but it’s just not convenient since the CF engine had always secretly kept your output just in case you decided to abort. At least, that’s my understanding of it.

2 Likes

@bdw429s Good information. If it’s a big improvement in performance then I’m for it. At the time I was just trying to dump/abort on my local dev so I thought it annoying and didn’t know the bigger picture.

So basically when I develop I can set this.bufferOutput = true; but on a live server I should this.bufferOutput = false;?

Yes, we’ve making that an environment-dependent setting in our Application.cfc files for some time