diff --git a/core/src/main/java/lucee/runtime/ComponentPageImpl.java b/core/src/main/java/lucee/runtime/ComponentPageImpl.java index 50571012d8..dedc134fdf 100755 --- a/core/src/main/java/lucee/runtime/ComponentPageImpl.java +++ b/core/src/main/java/lucee/runtime/ComponentPageImpl.java @@ -37,7 +37,6 @@ import lucee.commons.io.res.util.ResourceUtil; import lucee.commons.lang.CFTypes; import lucee.commons.lang.ExceptionUtil; -import lucee.commons.lang.HTMLEntities; import lucee.commons.lang.StringUtil; import lucee.commons.lang.mimetype.MimeType; import lucee.commons.net.HTTPUtil; @@ -398,7 +397,7 @@ private void callRest(PageContext pc, Component component, String path, Result r catch (NumberFormatException ne) { status = 500; } - RestUtil.setStatus(pc, status, cte.getMessage()); + RestUtil.setStatus(pc, status, cte.getMessage(), true); return; } else { @@ -426,7 +425,7 @@ private void callRest(PageContext pc, Component component, String path, Result r else { msg = prefix; } - RestUtil.setStatus(pc, 404, HTMLEntities.escapeHTML(msg)); + RestUtil.setStatus(pc, 404, msg, true); ThreadLocalPageContext.getLog(pc, "rest").info("REST", prefix + " in" + addDetail); } else if (status == 405) { @@ -437,7 +436,7 @@ else if (status == 405) { else { msg = prefix; } - RestUtil.setStatus(pc, 405, HTMLEntities.escapeHTML(msg)); + RestUtil.setStatus(pc, 405, msg, true); ThreadLocalPageContext.getLog(pc, "rest").info("REST", prefix + " for" + addDetail); } else if (status == 406) { @@ -448,7 +447,7 @@ else if (status == 406) { else { msg = prefix; } - RestUtil.setStatus(pc, 406, HTMLEntities.escapeHTML(msg)); + RestUtil.setStatus(pc, 406, msg, true); ThreadLocalPageContext.getLog(pc, "rest").info("REST", prefix + " for" + addDetail); } @@ -473,7 +472,7 @@ private void _callThroughSubresourceLocator(PageContext pc, Component component, callRest(pc, subcomp, path, result, suppressContent); } else { - RestUtil.setStatus(pc, 500, "Subresource locator error."); + RestUtil.setStatus(pc, 500, "Subresource locator error.", false); } } @@ -557,11 +556,9 @@ else if (!"body".equalsIgnoreCase(restArgSource)) { if (PageContextUtil.show(pc)) { throw e; } - else { - ThreadLocalPageContext.getLog(pc, "rest").error("REST", e); - RestUtil.setStatus(pc, 500, ExceptionUtil.getMessage(e, true)); - return null; - } + ThreadLocalPageContext.getLog(pc, "rest").error("REST", e); + RestUtil.setStatus(pc, 500, ExceptionUtil.getMessage(e, true), true); + return null; } finally { if (suppressContent) pc.unsetSilent(); diff --git a/core/src/main/java/lucee/runtime/PageContextImpl.java b/core/src/main/java/lucee/runtime/PageContextImpl.java index 7368c39906..de2b191424 100644 --- a/core/src/main/java/lucee/runtime/PageContextImpl.java +++ b/core/src/main/java/lucee/runtime/PageContextImpl.java @@ -2572,7 +2572,7 @@ public void executeRest(String realPath, boolean throwExcpetion) throws PageExce throw Caster.toPageException(e); } } - else RestUtil.setStatus(this, 404, null); + else RestUtil.setStatus(this, 404, null, false); return; } @@ -2678,7 +2678,7 @@ else if (StringUtil.endsWithIgnoreCase(pathInfo, ".java")) { // base = PageSourceImpl.best(config.getPageSources(this,null,realPath,true,false,true)); if (mapping == null || mapping.getPhysical() == null) { - RestUtil.setStatus(this, 404, "no rest service for [" + HTMLEntities.escapeHTML(pathInfo) + "] found"); + RestUtil.setStatus(this, 404, "no rest service for [" + HTMLEntities.escapeHTML(pathInfo) + "] found", false); getLog("rest").error("REST", "no rest service for [" + pathInfo + "] found"); } else { diff --git a/core/src/main/java/lucee/runtime/config/ConfigFactory.java b/core/src/main/java/lucee/runtime/config/ConfigFactory.java index bb332ff0e8..f2217cef4c 100644 --- a/core/src/main/java/lucee/runtime/config/ConfigFactory.java +++ b/core/src/main/java/lucee/runtime/config/ConfigFactory.java @@ -90,7 +90,7 @@ public static UpdateInfo getNew(CFMLEngine engine, Resource contextDir, final bo // if the config got deleted, we need to make sure the required extension get installed again boolean deleted = false; - if (readOnly && !ConfigServerFactory.getConfigFile(contextDir).exists()) { + if (readOnly && !ConfigServerFactory.getConfigFile(contextDir, true).exists()) { deleted = resOldVersion.delete(); } diff --git a/core/src/main/java/lucee/runtime/config/ConfigServerFactory.java b/core/src/main/java/lucee/runtime/config/ConfigServerFactory.java index 2332ba1bea..a142aa332e 100644 --- a/core/src/main/java/lucee/runtime/config/ConfigServerFactory.java +++ b/core/src/main/java/lucee/runtime/config/ConfigServerFactory.java @@ -55,7 +55,7 @@ public final class ConfigServerFactory extends ConfigFactory { - public static final String CONFIG_FILE_NAME = ".CFConfig.json"; + public static final String[] CONFIG_FILE_NAMES = new String[] { ".CFConfig.json", "config.json" }; /** * creates a new ServletConfig Impl Object @@ -110,7 +110,7 @@ public static ConfigServerImpl newInstance(CFMLEngineImpl engine, Map 0; @@ -175,24 +175,31 @@ public static ConfigServerImpl newInstance(CFMLEngineImpl engine, Map - + diff --git a/loader/pom.xml b/loader/pom.xml index 50253b9a1e..c510fc5492 100644 --- a/loader/pom.xml +++ b/loader/pom.xml @@ -3,7 +3,7 @@ org.lucee lucee - 6.2.0.89-SNAPSHOT + 6.2.0.90-SNAPSHOT jar Lucee Loader Build diff --git a/test/tickets/LDEV5092.cfc b/test/tickets/LDEV5092.cfc new file mode 100644 index 0000000000..0f8364b8ac --- /dev/null +++ b/test/tickets/LDEV5092.cfc @@ -0,0 +1,25 @@ +component extends="org.lucee.cfml.test.LuceeTestCase" skip=true { + + function run( testResults , testBox ) { + describe( title='LDEV-5092', body=function(){ + it( title='trigger java.util.ConcurrentModificationException', body=function() { + var a = []; + ArraySet(a,1,1000,""); + ArrayEach(a, testJava, true); + }); + }); + } + + private function testJava(){ + var oRegExMatcher = createObject("java", "java.util.regex.Matcher"); + var re = oRegExMatcher.quoteReplacement( "(?i)" ); // NPE + var re2 = oRegExMatcher.quoteReplacement( javacast("string", "1") ); + var sReturn = "string"; + sReturn.replaceAll( + oRegExMatcher.quoteReplacement( "(?i)" ), + oRegExMatcher.quoteReplacement( javacast("string", "1") ) + ); + sReturn.replaceAll( re, re2 ); + return sReturn; + } +} \ No newline at end of file