From: markt Date: Tue, 11 May 2010 20:05:15 +0000 (+0000) Subject: Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49226 X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=49d6ab27b5cbce95c84af460da6abf97d65836fb;p=tomcat7.0 Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=49226 Ensure case conversion behaves as expected Patch provided by sebb git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@943260 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/java/org/apache/catalina/core/ApplicationPart.java b/java/org/apache/catalina/core/ApplicationPart.java index 13c9b7edd..58212fc6e 100644 --- a/java/org/apache/catalina/core/ApplicationPart.java +++ b/java/org/apache/catalina/core/ApplicationPart.java @@ -25,6 +25,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import javax.servlet.MultipartConfigElement; @@ -134,7 +135,7 @@ public class ApplicationPart implements Part { String fileName = null; String cd = getHeader("Content-Disposition"); if (cd != null) { - String cdl = cd.toLowerCase(); + String cdl = cd.toLowerCase(Locale.ENGLISH); if (cdl.startsWith("form-data") || cdl.startsWith("attachment")) { ParameterParser paramParser = new ParameterParser(); paramParser.setLowerCaseNames(true); diff --git a/java/org/apache/catalina/core/StandardEngine.java b/java/org/apache/catalina/core/StandardEngine.java index 12fe38c24..04b127c9e 100644 --- a/java/org/apache/catalina/core/StandardEngine.java +++ b/java/org/apache/catalina/core/StandardEngine.java @@ -16,6 +16,8 @@ */ package org.apache.catalina.core; +import java.util.Locale; + import org.apache.catalina.Container; import org.apache.catalina.Engine; import org.apache.catalina.Host; @@ -138,7 +140,7 @@ public class StandardEngine extends ContainerBase implements Engine { if (host == null) { this.defaultHost = null; } else { - this.defaultHost = host.toLowerCase(); + this.defaultHost = host.toLowerCase(Locale.ENGLISH); } support.firePropertyChange("defaultHost", oldDefaultHost, this.defaultHost); diff --git a/java/org/apache/catalina/core/StandardHost.java b/java/org/apache/catalina/core/StandardHost.java index 19bae6f8c..c3b1b38b6 100644 --- a/java/org/apache/catalina/core/StandardHost.java +++ b/java/org/apache/catalina/core/StandardHost.java @@ -19,6 +19,7 @@ package org.apache.catalina.core; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.WeakHashMap; @@ -474,7 +475,7 @@ public class StandardHost extends ContainerBase implements Host { throw new IllegalArgumentException (sm.getString("standardHost.nullName")); - name = name.toLowerCase(); // Internally all names are lower case + name = name.toLowerCase(Locale.ENGLISH); // Internally all names are lower case String oldName = this.name; this.name = name; @@ -569,7 +570,7 @@ public class StandardHost extends ContainerBase implements Host { */ public void addAlias(String alias) { - alias = alias.toLowerCase(); + alias = alias.toLowerCase(Locale.ENGLISH); synchronized (aliasesLock) { // Skip duplicate aliases @@ -734,7 +735,7 @@ public class StandardHost extends ContainerBase implements Host { */ public void removeAlias(String alias) { - alias = alias.toLowerCase(); + alias = alias.toLowerCase(Locale.ENGLISH); synchronized (aliasesLock) { diff --git a/java/org/apache/catalina/deploy/FilterMap.java b/java/org/apache/catalina/deploy/FilterMap.java index a93e83b94..568395f3d 100644 --- a/java/org/apache/catalina/deploy/FilterMap.java +++ b/java/org/apache/catalina/deploy/FilterMap.java @@ -22,6 +22,7 @@ package org.apache.catalina.deploy; import org.apache.catalina.util.RequestUtil; import java.io.Serializable; import java.util.ArrayList; +import java.util.Locale; import javax.servlet.DispatcherType; @@ -139,7 +140,7 @@ public class FilterMap implements Serializable { * representing the state of when filters should be applied. */ public void setDispatcher(String dispatcherString) { - String dispatcher = dispatcherString.toUpperCase(); + String dispatcher = dispatcherString.toUpperCase(Locale.ENGLISH); if (dispatcher.equals(DispatcherType.FORWARD.name())) { // apply FORWARD to the global dispatcherMapping. diff --git a/java/org/apache/catalina/manager/HTMLManagerServlet.java b/java/org/apache/catalina/manager/HTMLManagerServlet.java index 6ce201062..76ce2e3b2 100644 --- a/java/org/apache/catalina/manager/HTMLManagerServlet.java +++ b/java/org/apache/catalina/manager/HTMLManagerServlet.java @@ -30,6 +30,7 @@ import java.util.Comparator; import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Random; import java.util.TreeMap; @@ -288,7 +289,7 @@ public final class HTMLManagerServlet extends ManagerServlet { } filename = extractFilename(warPart.getHeader("Content-Disposition")); - if (!filename.toLowerCase().endsWith(".war")) { + if (!filename.toLowerCase(Locale.ENGLISH).endsWith(".war")) { message = sm.getString( "htmlManagerServlet.deployUploadNotWar", filename); break; @@ -305,7 +306,7 @@ public final class HTMLManagerServlet extends ManagerServlet { // Identify the appBase of the owning Host of this Context // (if any) basename = filename.substring(0, - filename.toLowerCase().indexOf(".war")); + filename.toLowerCase(Locale.ENGLISH).indexOf(".war")); File file = new File(getAppBase(), filename); if (file.exists()) { message = sm.getString( @@ -358,7 +359,7 @@ public final class HTMLManagerServlet extends ManagerServlet { private String extractFilename(String cd) { String fileName = null; if (cd != null) { - String cdl = cd.toLowerCase(); + String cdl = cd.toLowerCase(Locale.ENGLISH); if (cdl.startsWith("form-data") || cdl.startsWith("attachment")) { ParameterParser parser = new ParameterParser(); parser.setLowerCaseNames(true); diff --git a/java/org/apache/catalina/manager/util/SessionUtils.java b/java/org/apache/catalina/manager/util/SessionUtils.java index c16543203..4a37cd02b 100644 --- a/java/org/apache/catalina/manager/util/SessionUtils.java +++ b/java/org/apache/catalina/manager/util/SessionUtils.java @@ -88,12 +88,12 @@ public class SessionUtils { locale = (Locale) obj; break; } - obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toLowerCase()); + obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toLowerCase(Locale.ENGLISH)); if (null != obj && obj instanceof Locale) { locale = (Locale) obj; break; } - obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toUpperCase()); + obj = in_session.getAttribute(LOCALE_TEST_ATTRIBUTES[i].toUpperCase(Locale.ENGLISH)); if (null != obj && obj instanceof Locale) { locale = (Locale) obj; break; @@ -183,12 +183,12 @@ public class SessionUtils { user = obj; break; } - obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toLowerCase()); + obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toLowerCase(Locale.ENGLISH)); if (null != obj) { user = obj; break; } - obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toUpperCase()); + obj = httpSession.getAttribute(USER_TEST_ATTRIBUTES[i].toUpperCase(Locale.ENGLISH)); if (null != obj) { user = obj; break; diff --git a/java/org/apache/catalina/servlets/CGIServlet.java b/java/org/apache/catalina/servlets/CGIServlet.java index 018339e2d..a062c5db0 100644 --- a/java/org/apache/catalina/servlets/CGIServlet.java +++ b/java/org/apache/catalina/servlets/CGIServlet.java @@ -1065,7 +1065,7 @@ public final class CGIServlet extends HttpServlet { String header = null; while (headers.hasMoreElements()) { header = null; - header = headers.nextElement().toUpperCase(); + header = headers.nextElement().toUpperCase(Locale.ENGLISH); //REMIND: rewrite multiple headers as if received as single //REMIND: change character set //REMIND: I forgot what the previous REMIND means diff --git a/java/org/apache/catalina/servlets/WebdavServlet.java b/java/org/apache/catalina/servlets/WebdavServlet.java index c314de894..83cc97f31 100644 --- a/java/org/apache/catalina/servlets/WebdavServlet.java +++ b/java/org/apache/catalina/servlets/WebdavServlet.java @@ -30,6 +30,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.util.Hashtable; +import java.util.Locale; import java.util.Stack; import java.util.TimeZone; import java.util.Vector; @@ -441,8 +442,8 @@ public class WebdavServlet if (path.endsWith("/")) path = path.substring(0, path.length() - 1); - if ((path.toUpperCase().startsWith("/WEB-INF")) || - (path.toUpperCase().startsWith("/META-INF"))) { + if ((path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { resp.sendError(WebdavStatus.SC_FORBIDDEN); return; } @@ -718,8 +719,8 @@ public class WebdavServlet String path = getRelativePath(req); - if ((path.toUpperCase().startsWith("/WEB-INF")) || - (path.toUpperCase().startsWith("/META-INF"))) { + if ((path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { resp.sendError(WebdavStatus.SC_FORBIDDEN); return; } @@ -1600,16 +1601,16 @@ public class WebdavServlet if (debug > 0) log("Dest path :" + destinationPath); - if ((destinationPath.toUpperCase().startsWith("/WEB-INF")) || - (destinationPath.toUpperCase().startsWith("/META-INF"))) { + if ((destinationPath.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (destinationPath.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { resp.sendError(WebdavStatus.SC_FORBIDDEN); return false; } String path = getRelativePath(req); - if ((path.toUpperCase().startsWith("/WEB-INF")) || - (path.toUpperCase().startsWith("/META-INF"))) { + if ((path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { resp.sendError(WebdavStatus.SC_FORBIDDEN); return false; } @@ -1809,8 +1810,8 @@ public class WebdavServlet HttpServletResponse resp, boolean setStatus) throws IOException { - if ((path.toUpperCase().startsWith("/WEB-INF")) || - (path.toUpperCase().startsWith("/META-INF"))) { + if ((path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { resp.sendError(WebdavStatus.SC_FORBIDDEN); return false; } @@ -1894,8 +1895,8 @@ public class WebdavServlet if (debug > 1) log("Delete:" + path); - if ((path.toUpperCase().startsWith("/WEB-INF")) || - (path.toUpperCase().startsWith("/META-INF"))) { + if ((path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF")) || + (path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF"))) { errorList.put(path, new Integer(WebdavStatus.SC_FORBIDDEN)); return; } @@ -2034,8 +2035,8 @@ public class WebdavServlet // Exclude any resource in the /WEB-INF and /META-INF subdirectories // (the "toUpperCase()" avoids problems on Windows systems) - if (path.toUpperCase().startsWith("/WEB-INF") || - path.toUpperCase().startsWith("/META-INF")) + if (path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF") || + path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF")) return; CacheEntry cacheEntry = resources.lookupCache(path); @@ -2327,8 +2328,8 @@ public class WebdavServlet // Exclude any resource in the /WEB-INF and /META-INF subdirectories // (the "toUpperCase()" avoids problems on Windows systems) - if (path.toUpperCase().startsWith("/WEB-INF") || - path.toUpperCase().startsWith("/META-INF")) + if (path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF") || + path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF")) return; // Retrieving the lock associated with the lock-null resource diff --git a/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java b/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java index e234b7101..072f9f3fe 100644 --- a/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java +++ b/java/org/apache/catalina/ssi/ResponseIncludeWrapper.java @@ -214,7 +214,7 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { @Override public void addDateHeader(String name, long value) { super.addDateHeader(name, value); - String lname = name.toLowerCase(); + String lname = name.toLowerCase(Locale.ENGLISH); if (lname.equals(LAST_MODIFIED)) { lastModified = value; } @@ -223,7 +223,7 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { @Override public void addHeader(String name, String value) { super.addHeader(name, value); - String lname = name.toLowerCase(); + String lname = name.toLowerCase(Locale.ENGLISH); if (lname.equals(LAST_MODIFIED)) { try { synchronized(RFC1123_FORMAT) { @@ -240,7 +240,7 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { @Override public void setDateHeader(String name, long value) { super.setDateHeader(name, value); - String lname = name.toLowerCase(); + String lname = name.toLowerCase(Locale.ENGLISH); if (lname.equals(LAST_MODIFIED)) { lastModified = value; } @@ -249,7 +249,7 @@ public class ResponseIncludeWrapper extends HttpServletResponseWrapper { @Override public void setHeader(String name, String value) { super.setHeader(name, value); - String lname = name.toLowerCase(); + String lname = name.toLowerCase(Locale.ENGLISH); if (lname.equals(LAST_MODIFIED)) { try { synchronized(RFC1123_FORMAT) { diff --git a/java/org/apache/catalina/ssi/SSIMediator.java b/java/org/apache/catalina/ssi/SSIMediator.java index 84be1ad0c..ede98aee8 100644 --- a/java/org/apache/catalina/ssi/SSIMediator.java +++ b/java/org/apache/catalina/ssi/SSIMediator.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.Date; import java.util.HashSet; import java.util.Iterator; +import java.util.Locale; import java.util.Set; import java.util.TimeZone; import org.apache.catalina.util.DateTool; @@ -181,7 +182,7 @@ public class SSIMediator { public String getVariableValue(String variableName, String encoding) { - String lowerCaseVariableName = variableName.toLowerCase(); + String lowerCaseVariableName = variableName.toLowerCase(Locale.ENGLISH); String variableValue = null; if (!isNameReserved(lowerCaseVariableName)) { //Try getting it externally first, if it fails, try getting the @@ -189,7 +190,7 @@ public class SSIMediator { // value variableValue = ssiExternalResolver.getVariableValue(variableName); if (variableValue == null) { - variableName = variableName.toUpperCase(); + variableName = variableName.toUpperCase(Locale.ENGLISH); variableValue = ssiExternalResolver .getVariableValue(className + "." + variableName); } diff --git a/java/org/apache/catalina/ssi/SSIProcessor.java b/java/org/apache/catalina/ssi/SSIProcessor.java index 615409258..98c9f3753 100644 --- a/java/org/apache/catalina/ssi/SSIProcessor.java +++ b/java/org/apache/catalina/ssi/SSIProcessor.java @@ -22,6 +22,7 @@ import java.io.PrintWriter; import java.io.Reader; import java.io.StringWriter; import java.util.HashMap; +import java.util.Locale; import java.util.StringTokenizer; import org.apache.catalina.util.IOTools; /** @@ -134,7 +135,7 @@ public class SSIProcessor { // during the loop String configErrMsg = ssiMediator.getConfigErrMsg(); SSICommand ssiCommand = - commands.get(strCmd.toLowerCase()); + commands.get(strCmd.toLowerCase(Locale.ENGLISH)); String errorMessage = null; if (ssiCommand == null) { errorMessage = "Unknown command: " + strCmd; diff --git a/java/org/apache/catalina/ssi/SSIServlet.java b/java/org/apache/catalina/ssi/SSIServlet.java index fe98163ba..cc2b146bd 100644 --- a/java/org/apache/catalina/ssi/SSIServlet.java +++ b/java/org/apache/catalina/ssi/SSIServlet.java @@ -25,6 +25,8 @@ import java.io.PrintWriter; import java.io.StringWriter; import java.net.URL; import java.net.URLConnection; +import java.util.Locale; + import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; @@ -147,8 +149,8 @@ public class SSIServlet extends HttpServlet { + path + "'"); // Exclude any resource in the /WEB-INF and /META-INF subdirectories // (the "toUpperCase()" avoids problems on Windows systems) - if (path == null || path.toUpperCase().startsWith("/WEB-INF") - || path.toUpperCase().startsWith("/META-INF")) { + if (path == null || path.toUpperCase(Locale.ENGLISH).startsWith("/WEB-INF") + || path.toUpperCase(Locale.ENGLISH).startsWith("/META-INF")) { res.sendError(HttpServletResponse.SC_NOT_FOUND, path); log("Can't serve file: " + path); return; diff --git a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java index bd690eb48..582aae532 100644 --- a/java/org/apache/catalina/ssi/SSIServletExternalResolver.java +++ b/java/org/apache/catalina/ssi/SSIServletExternalResolver.java @@ -25,6 +25,8 @@ import java.net.URLDecoder; import java.util.Collection; import java.util.Date; import java.util.Enumeration; +import java.util.Locale; + import javax.servlet.RequestDispatcher; import javax.servlet.ServletContext; import javax.servlet.ServletException; @@ -150,7 +152,7 @@ public class SSIServletExternalResolver implements SSIExternalResolver { protected String getCGIVariable(String name) { String retVal = null; - String[] nameParts = name.toUpperCase().split("_"); + String[] nameParts = name.toUpperCase(Locale.ENGLISH).split("_"); int requiredParts = 2; if (nameParts.length == 1) { if (nameParts[0].equals("PATH")) { diff --git a/java/org/apache/catalina/startup/ClassLoaderFactory.java b/java/org/apache/catalina/startup/ClassLoaderFactory.java index f58089f75..9384f4faa 100644 --- a/java/org/apache/catalina/startup/ClassLoaderFactory.java +++ b/java/org/apache/catalina/startup/ClassLoaderFactory.java @@ -22,6 +22,7 @@ package org.apache.catalina.startup; import java.io.File; import java.net.URL; import java.util.LinkedHashSet; +import java.util.Locale; import java.util.Set; import org.apache.catalina.loader.StandardClassLoader; @@ -110,7 +111,7 @@ public final class ClassLoaderFactory { continue; String filenames[] = directory.list(); for (int j = 0; j < filenames.length; j++) { - String filename = filenames[j].toLowerCase(); + String filename = filenames[j].toLowerCase(Locale.ENGLISH); if (!filename.endsWith(".jar")) continue; File file = new File(directory, filenames[j]); @@ -197,7 +198,7 @@ public final class ClassLoaderFactory { + directory.getAbsolutePath()); String filenames[] = directory.list(); for (int j = 0; j < filenames.length; j++) { - String filename = filenames[j].toLowerCase(); + String filename = filenames[j].toLowerCase(Locale.ENGLISH); if (!filename.endsWith(".jar")) continue; File file = new File(directory, filenames[j]); diff --git a/java/org/apache/catalina/startup/ContextConfig.java b/java/org/apache/catalina/startup/ContextConfig.java index f6858163e..b24fb17ea 100644 --- a/java/org/apache/catalina/startup/ContextConfig.java +++ b/java/org/apache/catalina/startup/ContextConfig.java @@ -38,6 +38,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; @@ -698,7 +699,7 @@ public class ContextConfig // Context path must start with '/' pathName = pathName.substring(1).replace('/', '#'); } - if (docBase.toLowerCase().endsWith(".war") && !file.isDirectory() && unpackWARs) { + if (docBase.toLowerCase(Locale.ENGLISH).endsWith(".war") && !file.isDirectory() && unpackWARs) { URL war = new URL("jar:" + (new File(docBase)).toURI().toURL() + "!/"); docBase = ExpandWar.expand(host, war, pathName); file = new File(docBase); @@ -706,7 +707,7 @@ public class ContextConfig if (context instanceof StandardContext) { ((StandardContext) context).setOriginalDocBase(origDocBase); } - } else if (docBase.toLowerCase().endsWith(".war") && + } else if (docBase.toLowerCase(Locale.ENGLISH).endsWith(".war") && !file.isDirectory() && !unpackWARs) { URL war = new URL("jar:" + (new File (docBase)).toURI().toURL() + "!/"); @@ -787,7 +788,7 @@ public class ContextConfig } File file = null; - if (docBase.toLowerCase().endsWith(".war")) { + if (docBase.toLowerCase(Locale.ENGLISH).endsWith(".war")) { file = new File(System.getProperty("java.io.tmpdir"), deploymentCount++ + "-" + docBase + ".war"); } else { diff --git a/java/org/apache/catalina/startup/HostConfig.java b/java/org/apache/catalina/startup/HostConfig.java index fe2c2905f..65d3ef41d 100644 --- a/java/org/apache/catalina/startup/HostConfig.java +++ b/java/org/apache/catalina/startup/HostConfig.java @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.Locale; import java.util.Set; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -583,7 +584,7 @@ public class HostConfig for (int i = 0; i < files.length; i++) { File contextXml = new File(configBase, files[i]); - if (files[i].toLowerCase().endsWith(".xml")) { + if (files[i].toLowerCase(Locale.ENGLISH).endsWith(".xml")) { // Calculate the context path and make sure it is unique String nameTmp = files[i].substring(0, files[i].length() - 4); @@ -662,7 +663,7 @@ public class HostConfig (contextXml.getAbsolutePath(), new Long(contextXml.lastModified())); deployedApp.redeployResources.put(docBase.getAbsolutePath(), new Long(docBase.lastModified())); - if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) { + if (docBase.getAbsolutePath().toLowerCase(Locale.ENGLISH).endsWith(".war")) { isExternalWar = true; } } else { @@ -752,7 +753,7 @@ public class HostConfig if (files[i].equalsIgnoreCase("WEB-INF")) continue; File dir = new File(appBase, files[i]); - if (files[i].toLowerCase().endsWith(".war") && dir.isFile() + if (files[i].toLowerCase(Locale.ENGLISH).endsWith(".war") && dir.isFile() && !invalidWars.contains(files[i]) ) { // Calculate the context path and make sure it is unique @@ -1496,7 +1497,7 @@ public class HostConfig } deployedApp.redeployResources.put(docBase.getAbsolutePath(), new Long(docBase.lastModified())); - if (docBase.getAbsolutePath().toLowerCase().endsWith(".war")) { + if (docBase.getAbsolutePath().toLowerCase(Locale.ENGLISH).endsWith(".war")) { isWar = true; } } diff --git a/java/org/apache/catalina/util/ExtensionValidator.java b/java/org/apache/catalina/util/ExtensionValidator.java index d3442fa1a..e5c59d466 100644 --- a/java/org/apache/catalina/util/ExtensionValidator.java +++ b/java/org/apache/catalina/util/ExtensionValidator.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; +import java.util.Locale; import java.util.NoSuchElementException; import java.util.StringTokenizer; import java.util.jar.JarInputStream; @@ -91,7 +92,7 @@ public final class ExtensionValidator { // build a list of jar files in the classpath while (strTok.hasMoreTokens()) { String classpathItem = strTok.nextToken(); - if (classpathItem.toLowerCase().endsWith(".jar")) { + if (classpathItem.toLowerCase(Locale.ENGLISH).endsWith(".jar")) { File item = new File(classpathItem); if (item.isFile()) { try { @@ -148,7 +149,7 @@ public final class ExtensionValidator { NamingEnumeration wne = dirContext.listBindings("/META-INF/"); Binding binding = wne.nextElement(); - if (binding.getName().toUpperCase().equals("MANIFEST.MF")) { + if (binding.getName().toUpperCase(Locale.ENGLISH).equals("MANIFEST.MF")) { Resource resource = (Resource)dirContext.lookup ("/META-INF/" + binding.getName()); inputStream = resource.streamContent(); @@ -180,7 +181,7 @@ public final class ExtensionValidator { ne = dirContext.listBindings("WEB-INF/lib/"); while ((ne != null) && ne.hasMoreElements()) { Binding binding = ne.nextElement(); - if (!binding.getName().toLowerCase().endsWith(".jar")) { + if (!binding.getName().toLowerCase(Locale.ENGLISH).endsWith(".jar")) { continue; } Object obj = @@ -425,7 +426,7 @@ public final class ExtensionValidator { } File[] files = targetDir.listFiles(); for (int i = 0; i < files.length; i++) { - if (files[i].getName().toLowerCase().endsWith(".jar") && + if (files[i].getName().toLowerCase(Locale.ENGLISH).endsWith(".jar") && files[i].isFile()) { try { addSystemResource(files[i]); diff --git a/java/org/apache/catalina/util/MIME2Java.java b/java/org/apache/catalina/util/MIME2Java.java index b029431d0..2d4b4d832 100644 --- a/java/org/apache/catalina/util/MIME2Java.java +++ b/java/org/apache/catalina/util/MIME2Java.java @@ -580,7 +580,7 @@ public class MIME2Java { * @see #reverse */ public static String convert(String mimeCharsetName) { - return s_enchash.get(mimeCharsetName.toUpperCase()); + return s_enchash.get(mimeCharsetName.toUpperCase(Locale.ENGLISH)); } /** @@ -598,6 +598,6 @@ public class MIME2Java { * @see #convert */ public static String reverse(String encoding) { - return s_revhash.get(encoding.toUpperCase()); + return s_revhash.get(encoding.toUpperCase(Locale.ENGLISH)); } } diff --git a/java/org/apache/tomcat/util/buf/MessageBytes.java b/java/org/apache/tomcat/util/buf/MessageBytes.java index cccad9b69..73744a501 100644 --- a/java/org/apache/tomcat/util/buf/MessageBytes.java +++ b/java/org/apache/tomcat/util/buf/MessageBytes.java @@ -19,6 +19,7 @@ package org.apache.tomcat.util.buf; import java.io.Serializable; import java.io.IOException; +import java.util.Locale; /** * This class is used to represent a subarray of bytes in an HTTP message. @@ -450,8 +451,8 @@ public final class MessageBytes implements Cloneable, Serializable { public int indexOfIgnoreCase(String s, int starting) { toString(); - String upper=strValue.toUpperCase(); - String sU=s.toUpperCase(); + String upper=strValue.toUpperCase(Locale.ENGLISH); + String sU=s.toUpperCase(Locale.ENGLISH); return upper.indexOf( sU, starting ); } diff --git a/java/org/apache/tomcat/util/http/AcceptLanguage.java b/java/org/apache/tomcat/util/http/AcceptLanguage.java index 96cff390d..c1d52d630 100644 --- a/java/org/apache/tomcat/util/http/AcceptLanguage.java +++ b/java/org/apache/tomcat/util/http/AcceptLanguage.java @@ -94,7 +94,7 @@ public class AcceptLanguage { qIndex < equalIndex) { String qValueStr = language.substring(qValueIndex + 1); language = language.substring(0, qValueIndex); - qValueStr = qValueStr.trim().toLowerCase(); + qValueStr = qValueStr.trim().toLowerCase(Locale.ENGLISH); qValueIndex = qValueStr.indexOf('='); qValue = new Double(0); if (qValueStr.startsWith("q") && diff --git a/java/org/apache/tomcat/util/http/fileupload/FileItemHeadersImpl.java b/java/org/apache/tomcat/util/http/fileupload/FileItemHeadersImpl.java index 2e77cf8bf..efbdf8e9c 100644 --- a/java/org/apache/tomcat/util/http/fileupload/FileItemHeadersImpl.java +++ b/java/org/apache/tomcat/util/http/fileupload/FileItemHeadersImpl.java @@ -22,6 +22,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; @@ -49,7 +50,7 @@ public class FileItemHeadersImpl implements FileItemHeaders, Serializable { private final List headerNameList = new ArrayList(); public String getHeader(String name) { - String nameLower = name.toLowerCase(); + String nameLower = name.toLowerCase(Locale.ENGLISH); List headerValueList = headerNameToValueListMap.get(nameLower); if (null == headerValueList) { return null; @@ -62,7 +63,7 @@ public class FileItemHeadersImpl implements FileItemHeaders, Serializable { } public Iterator getHeaders(String name) { - String nameLower = name.toLowerCase(); + String nameLower = name.toLowerCase(Locale.ENGLISH); List headerValueList = headerNameToValueListMap.get(nameLower); if (null == headerValueList) { return Collections.emptyList().iterator(); diff --git a/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java b/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java index e5cdac026..49985c66b 100644 --- a/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java +++ b/java/org/apache/tomcat/util/http/fileupload/FileUploadBase.java @@ -21,6 +21,7 @@ import java.io.InputStream; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.NoSuchElementException; @@ -76,7 +77,7 @@ public abstract class FileUploadBase { if (contentType == null) { return false; } - if (contentType.toLowerCase().startsWith(MULTIPART)) { + if (contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART)) { return true; } return false; @@ -382,7 +383,7 @@ public abstract class FileUploadBase { private String getFileName(String pContentDisposition) { String fileName = null; if (pContentDisposition != null) { - String cdl = pContentDisposition.toLowerCase(); + String cdl = pContentDisposition.toLowerCase(Locale.ENGLISH); if (cdl.startsWith(FORM_DATA) || cdl.startsWith(ATTACHMENT)) { ParameterParser parser = new ParameterParser(); parser.setLowerCaseNames(true); @@ -427,7 +428,7 @@ public abstract class FileUploadBase { private String getFieldName(String pContentDisposition) { String fieldName = null; if (pContentDisposition != null - && pContentDisposition.toLowerCase().startsWith(FORM_DATA)) { + && pContentDisposition.toLowerCase(Locale.ENGLISH).startsWith(FORM_DATA)) { ParameterParser parser = new ParameterParser(); parser.setLowerCaseNames(true); // Parameter parser can handle null input @@ -738,7 +739,7 @@ public abstract class FileUploadBase { String contentType = ctx.getContentType(); if ((null == contentType) - || (!contentType.toLowerCase().startsWith(MULTIPART))) { + || (!contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART))) { throw new InvalidContentTypeException( "the request doesn't contain a " + MULTIPART_FORM_DATA @@ -838,7 +839,7 @@ public abstract class FileUploadBase { if (fieldName != null) { String subContentType = headers.getHeader(CONTENT_TYPE); if (subContentType != null - && subContentType.toLowerCase() + && subContentType.toLowerCase(Locale.ENGLISH) .startsWith(MULTIPART_MIXED)) { currentFieldName = fieldName; // Multiple files associated with this field name diff --git a/java/org/apache/tomcat/util/http/fileupload/ParameterParser.java b/java/org/apache/tomcat/util/http/fileupload/ParameterParser.java index 71f0bbcb6..d62e5c0fe 100644 --- a/java/org/apache/tomcat/util/http/fileupload/ParameterParser.java +++ b/java/org/apache/tomcat/util/http/fileupload/ParameterParser.java @@ -17,6 +17,7 @@ package org.apache.tomcat.util.http.fileupload; import java.util.HashMap; +import java.util.Locale; import java.util.Map; /** @@ -319,7 +320,7 @@ public class ParameterParser { } if ((paramName != null) && (paramName.length() > 0)) { if (this.lowerCaseNames) { - paramName = paramName.toLowerCase(); + paramName = paramName.toLowerCase(Locale.ENGLISH); } params.put(paramName, paramValue); } diff --git a/java/org/apache/tomcat/util/http/fileupload/ServletFileUpload.java b/java/org/apache/tomcat/util/http/fileupload/ServletFileUpload.java index 7c32eb2f6..49a9885f9 100644 --- a/java/org/apache/tomcat/util/http/fileupload/ServletFileUpload.java +++ b/java/org/apache/tomcat/util/http/fileupload/ServletFileUpload.java @@ -18,6 +18,7 @@ package org.apache.tomcat.util.http.fileupload; import java.io.IOException; import java.util.List; +import java.util.Locale; import javax.servlet.http.HttpServletRequest; @@ -61,14 +62,14 @@ public class ServletFileUpload extends FileUpload { */ public static final boolean isMultipartContent( HttpServletRequest request) { - if (!"post".equals(request.getMethod().toLowerCase())) { + if (!"post".equals(request.getMethod().toLowerCase(Locale.ENGLISH))) { return false; } String contentType = request.getContentType(); if (contentType == null) { return false; } - if (contentType.toLowerCase().startsWith(MULTIPART)) { + if (contentType.toLowerCase(Locale.ENGLISH).startsWith(MULTIPART)) { return true; } return false; diff --git a/java/org/apache/tomcat/util/modeler/OperationInfo.java b/java/org/apache/tomcat/util/modeler/OperationInfo.java index d1a71caf1..3796471f3 100644 --- a/java/org/apache/tomcat/util/modeler/OperationInfo.java +++ b/java/org/apache/tomcat/util/modeler/OperationInfo.java @@ -19,6 +19,8 @@ package org.apache.tomcat.util.modeler; +import java.util.Locale; + import javax.management.MBeanOperationInfo; import javax.management.MBeanParameterInfo; @@ -64,7 +66,7 @@ public class OperationInfo extends FeatureInfo { if (impact == null) this.impact = null; else - this.impact = impact.toUpperCase(); + this.impact = impact.toUpperCase(Locale.ENGLISH); } diff --git a/java/org/apache/tomcat/util/net/URL.java b/java/org/apache/tomcat/util/net/URL.java index dfdb6389b..a0f996677 100644 --- a/java/org/apache/tomcat/util/net/URL.java +++ b/java/org/apache/tomcat/util/net/URL.java @@ -20,6 +20,7 @@ package org.apache.tomcat.util.net; import java.io.Serializable; import java.net.MalformedURLException; +import java.util.Locale; /** @@ -110,7 +111,7 @@ public final class URL implements Serializable { for (i = start; !aRef && (i < limit) ; i++) { c = spec.charAt(i); if (c == ':') { - String s = spec.substring(start, i).toLowerCase(); + String s = spec.substring(start, i).toLowerCase(Locale.ENGLISH); // Assume all protocols are valid newProtocol = s; start = i + 1; diff --git a/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java b/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java index 8143e2fa8..df0be92f5 100644 --- a/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java +++ b/java/org/apache/tomcat/util/net/jsse/JSSESocketFactory.java @@ -39,6 +39,7 @@ import java.security.cert.CollectionCertStoreParameters; import java.security.cert.PKIXBuilderParameters; import java.security.cert.X509CertSelector; import java.util.Collection; +import java.util.Locale; import java.util.Vector; import javax.net.ssl.CertPathTrustManagerParameters; @@ -533,7 +534,7 @@ public class JSSESocketFactory if (keyAlias != null) { String alias = keyAlias; if (JSSESocketFactory.defaultKeystoreType.equals(keystoreType)) { - alias = alias.toLowerCase(); + alias = alias.toLowerCase(Locale.ENGLISH); } for(int i=0; i= 0) || - (jspFile.toUpperCase().indexOf("/WEB-INF/") != 0) || - (jspFile.toUpperCase().indexOf("/META-INF/") != 0)) + (jspFile.toUpperCase(Locale.ENGLISH).indexOf("/WEB-INF/") != 0) || + (jspFile.toUpperCase(Locale.ENGLISH).indexOf("/META-INF/") != 0)) throw new JspTagException("Invalid JSP file " + jspFile); InputStream in diff --git a/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java b/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java index f5ff2c08c..f3b665fca 100644 --- a/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java +++ b/webapps/examples/WEB-INF/classes/jsp2/examples/el/Functions.java @@ -16,6 +16,8 @@ */ package jsp2.examples.el; +import java.util.Locale; + /** * Defines the functions for the jsp2 example tag library. * @@ -38,6 +40,6 @@ public class Functions { } public static String caps( String text ) { - return text.toUpperCase(); + return text.toUpperCase(Locale.ENGLISH); } }