# HG changeset patch # User martin # Date 1548723717 28800 # Mon Jan 28 17:01:57 2019 -0800 # Node ID ecf8d19d182be7353c2f0ff4cc37e92348c825f5 # Parent bc20d037640298afb2b72655685382177c2751ae 8217944: bugs in java.net.URLConnection.getFileNameMap() Reviewed-by: duke Contributed-by: Tobias Thierer , Martin Buchholz diff --git a/src/java.base/share/classes/sun/net/www/MimeTable.java b/src/java.base/share/classes/sun/net/www/MimeTable.java --- a/src/java.base/share/classes/sun/net/www/MimeTable.java +++ b/src/java.base/share/classes/sun/net/www/MimeTable.java @@ -30,6 +30,7 @@ import java.net.FileNameMap; import java.util.Hashtable; import java.util.Enumeration; +import java.util.Locale; import java.util.Properties; import java.util.StringTokenizer; @@ -167,24 +168,35 @@ * with it. Parses general file names, and URLs. */ public MimeEntry findByFileName(String fname) { - String ext = ""; + String ext = getExtension(fname); + return findByExt(ext); + } - int i = fname.lastIndexOf('#'); - - if (i > 0) { - fname = fname.substring(0, i - 1); + private static String getExtension(String fname) { + int fragmentIndex = fname.lastIndexOf('#'); + if (fragmentIndex < 0) { + fragmentIndex = fname.length(); } - i = fname.lastIndexOf('.'); - // REMIND: OS specific delimters appear here - i = Math.max(i, fname.lastIndexOf('/')); - i = Math.max(i, fname.lastIndexOf('?')); - - if (i != -1 && fname.charAt(i) == '.') { - ext = fname.substring(i).toLowerCase(); + int queryIndex = fname.lastIndexOf('?', fragmentIndex); + if (queryIndex < 0) { + queryIndex = fragmentIndex; } - return findByExt(ext); + int slashIndex = fname.lastIndexOf('/', queryIndex); + if (slashIndex < 0) { + slashIndex = 0; + } + fname = fname.substring(slashIndex, queryIndex); + + int dotIndex = fname.lastIndexOf('.', queryIndex); + String result; + if (dotIndex >= 0) { + result = fname.substring(dotIndex); // include the '.' + } else { + result = ""; // or: result = "." + fname + } + return result.toLowerCase(Locale.ROOT); } /**