< prev index next >
src/java.base/share/classes/sun/net/www/MimeTable.java
Print this page
8217944: bugs in java.net.URLConnection.getFileNameMap()
Reviewed-by: duke
Contributed-by: Tobias Thierer <tobiast@google.com>, Martin Buchholz <martinrb@google.com>
*** 28,37 ****
--- 28,38 ----
import java.io.*;
import java.net.FileNameMap;
import java.util.Hashtable;
import java.util.Enumeration;
+ import java.util.Locale;
import java.util.Properties;
import java.util.StringTokenizer;
public class MimeTable implements FileNameMap {
/** Keyed by content type, returns MimeEntries */
*** 165,192 ****
/**
* Locate a MimeEntry by the file extension that has been associated
* with it. Parses general file names, and URLs.
*/
public MimeEntry findByFileName(String fname) {
! String ext = "";
!
! int i = fname.lastIndexOf('#');
! if (i > 0) {
! fname = fname.substring(0, i - 1);
}
! 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();
}
! return findByExt(ext);
}
/**
* Locate a MimeEntry by the file extension that has been associated
* with it.
--- 166,204 ----
/**
* Locate a MimeEntry by the file extension that has been associated
* with it. Parses general file names, and URLs.
*/
public MimeEntry findByFileName(String fname) {
! String ext = getExtension(fname);
! return findByExt(ext);
! }
! private static String getExtension(String fname) {
! int fragmentIndex = fname.lastIndexOf('#');
! if (fragmentIndex < 0) {
! fragmentIndex = fname.length();
}
! int queryIndex = fname.lastIndexOf('?', fragmentIndex);
! if (queryIndex < 0) {
! queryIndex = fragmentIndex;
! }
! 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);
}
/**
* Locate a MimeEntry by the file extension that has been associated
* with it.
< prev index next >