# HG changeset patch # User wetmore # Date 1210490776 25200 # Node ID 6ce58b34b3df8588ed7a0836e465c4aed3cfcfef # Parent 320ce398f07e1bb8c023cd668a46252498982121# Parent d612e90c3ebc90530a50a127797f13d042ad70de Merge diff -r 320ce398f07e -r 6ce58b34b3df jdk/src/share/classes/sun/misc/URLClassPath.java --- a/jdk/src/share/classes/sun/misc/URLClassPath.java Sat May 10 12:14:53 2008 -0700 +++ b/jdk/src/share/classes/sun/misc/URLClassPath.java Sun May 11 00:26:16 2008 -0700 @@ -961,6 +961,7 @@ * from a file URL that refers to a directory. */ private static class FileLoader extends Loader { + /* Canonicalized File */ private File dir; FileLoader(URL url) throws IOException { @@ -970,7 +971,7 @@ } String path = url.getFile().replace('/', File.separatorChar); path = ParseUtil.decode(path); - dir = new File(path); + dir = (new File(path)).getCanonicalFile(); } /* @@ -997,8 +998,19 @@ if (check) URLClassPath.check(url); - final File file = - new File(dir, name.replace('/', File.separatorChar)); + + final File file; + if (name.indexOf("..") != -1) { + file = (new File(dir, name.replace('/', File.separatorChar))) + .getCanonicalFile(); + if ( !((file.getPath()).startsWith(dir.getPath())) ) { + /* outside of base dir */ + return null; + } + } else { + file = new File(dir, name.replace('/', File.separatorChar)); + } + if (file.exists()) { return new Resource() { public String getName() { return name; };