JSMin fails when access to internal CF Java Components is disabled

Description

Checking the "Disable access to internal ColdFusion Java components" option in the ColdFusion administrator causes JavaScript minification to fail on request end.

The following is a Java stack trace from the test environment:

java.io.IOException: Stream closed
at java.io.StringReader.ensureOpen(StringReader.java:39)
at java.io.StringReader.read(StringReader.java:52)
at java.io.FilterReader.read(FilterReader.java:48)
at java.io.PushbackReader.read(PushbackReader.java:73)
at com.magnoliabox.jsmin.JSMin.get(JSMin.java:91)
at com.magnoliabox.jsmin.JSMin.next(JSMin.java:120)
at com.magnoliabox.jsmin.JSMin.action(JSMin.java:188)
at com.magnoliabox.jsmin.JSMin.jsmin(JSMin.java:221)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at coldfusion.runtime.StructBean.invoke(StructBean.java:508)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2393)
at cfcombine2ecfc980684724$funcCOMPRESSJSWITHJSMIN.runFunction(C:\farcry\core\packages\farcry\combine\combine.cfc:354)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:220)
at coldfusion.runtime.CfJspPage._invokeUDF(CfJspPage.java:2582)
at cfcombine2ecfc980684724$funcCOMBINE.runFunction(C:\farcry\core\packages\farcry\combine\combine.cfc:279)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:517)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:496)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:355)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2301)
at cfutils2ecfc1581523079$funcCOMBINE.runFunction(C:\farcry\core\packages\farcry\utils.cfc:67)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:472)
at coldfusion.filter.SilentFilter.invoke(SilentFilter.java:47)
at coldfusion.runtime.UDFMethod$ReturnTypeFilter.invoke(UDFMethod.java:405)
at coldfusion.runtime.UDFMethod$ArgumentCollectionFilter.invoke(UDFMethod.java:368)
at coldfusion.filter.FunctionAccessFilter.invoke(FunctionAccessFilter.java:55)
at coldfusion.runtime.UDFMethod.runFilterChain(UDFMethod.java:321)
at coldfusion.runtime.UDFMethod.invoke(UDFMethod.java:517)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:496)
at coldfusion.runtime.TemplateProxy.invoke(TemplateProxy.java:355)
at coldfusion.runtime.CfJspPage._invoke(CfJspPage.java:2301)
at cfjsInHead2ecfm857967573.runPage(C:\farcry\core\tags\core\jsInHead.cfm:86)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.filter.CFVariablesScopeFilter.invoke(CFVariablesScopeFilter.java:56)
at coldfusion.tagext.lang.ModuleTag.doStartTag(ModuleTag.java:271)
at cf_farcryOnRequestEnd2ecfm1772183517.runPage(C:\farcry\core\tags\farcry_farcryOnRequestEnd.cfm:54)
at coldfusion.runtime.CfJspPage.invoke(CfJspPage.java:231)
at coldfusion.tagext.lang.IncludeTag.doStartTag(IncludeTag.java:416)
at coldfusion.runtime.CfJspPage._emptyTcfTag(CfJspPage.java:2722)
at cfApplication2ecfc489319500$funcONREQUESTEND.runFunction(C:\farcry\core\Application.cfc:402)
...

The issue was reproducible in the latest development versions of FarCry Core 6.0, 6.1, and 6.2.

This issue was reported previously in the farcry-dev Google Group:

https://groups.google.com/forum/?hl=en&fromgroups#!searchin/farcry-dev/stream$20closed

Looking at the Java source, the exception occurs while trying to read from the StringReader object containing the unprocessed JavaScript text. This is odd as StringReader is a standard Java class and the object is opened shortly before the error occurs.

Environment

ColdFusion 9.0.1 on Windows 7 64-bit, JDK 1.6.0_29 (x64)

Activity

Show:

Justin Carter October 21, 2015 at 6:08 AM

Java object access is likely to remain required.

Geoff Bowers July 20, 2012 at 2:02 AM

Current workaround for this:

utils.cfc:46

<!--- COMBINE: Used for CSS and JS --->
<cfset variables.oCombine = createObject("component", "farcry.core.packages.farcry.combine.combine").init(
enableCache= true,
cachePath= "#application.path.cache#",
enableETags= false,
enableJSMin= true,
enableYuiCSS= true,
skipMissingFiles= true,
javaLoader= createObject("component", "farcry.core.packages.farcry.javaloader.JavaLoader"),
jarPath= expandPath('/farcry/core/packages/farcry/combine/lib')
) />

[enableJSMin= true, enableYuiCSS= true,] Set them to false.

Won't Fix

Details

Assignee

Reporter

Components

Priority

Created July 3, 2012 at 4:48 AM
Updated October 21, 2015 at 6:08 AM
Resolved October 21, 2015 at 6:08 AM