diff --git a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java index 757c0990dd..169c5575fa 100644 --- a/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java +++ b/commons-vfs2/src/main/java/org/apache/commons/vfs2/provider/UriParser.java @@ -431,7 +431,7 @@ public static String extractScheme(final String[] schemes, final String uri, fin buffer.append(uri); } for (final String scheme : schemes) { - if (uri.startsWith(scheme + ":")) { + if (uri.startsWith(scheme) && uri.length() > scheme.length() && uri.charAt(scheme.length()) == ':') { if (buffer != null) { buffer.delete(0, uri.indexOf(':') + 1); } diff --git a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java index 712ef209a1..b03c59fca2 100644 --- a/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java +++ b/commons-vfs2/src/test/java/org/apache/commons/vfs2/provider/UriParserBenchmark.java @@ -29,6 +29,7 @@ public class UriParserBenchmark { private static final String PATH_TO_NORMALIZE = "file:///this/../is/a%2flong%2Fpath/./for testing/normlisePath%2fmethod.txt"; + private static final String[] SCHEMES = {"file", "ftp", "ftps", "webdav", "temp", "ram", "http", "https", "sftp", "zip", "jar", "tgz", "gz"}; @Benchmark public void normalisePath() throws FileSystemException { @@ -36,4 +37,9 @@ public void normalisePath() throws FileSystemException { UriParser.fixSeparators(path); UriParser.normalisePath(path); } + + @Benchmark + public void extractScheme() throws FileSystemException { + UriParser.extractScheme(SCHEMES, PATH_TO_NORMALIZE); + } }