Bugfix [3608470]: Configuration.getEncoding(Locale) wasn't thread-safe if it was called with Locale variations that weren't registered and a less specific matching entry was found.
diff --git a/src/main/java/freemarker/template/Configuration.java b/src/main/java/freemarker/template/Configuration.java
index 4623050..50eecb7 100644
--- a/src/main/java/freemarker/template/Configuration.java
+++ b/src/main/java/freemarker/template/Configuration.java
@@ -67,6 +67,7 @@
import java.util.Set;
import java.util.SortedMap;
import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
import javax.servlet.ServletContext;
@@ -137,7 +138,7 @@
private TemplateCache cache;
private HashMap variables = new HashMap();
- private HashMap encodingMap = new HashMap();
+ private Map encodingMap = new ConcurrentHashMap();
private Map autoImportMap = new HashMap();
private ArrayList autoImports = new ArrayList(), autoIncludes = new ArrayList();
private String defaultEncoding = SecurityUtilities.getSystemProperty("file.encoding");