diff options
| author | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-20 12:28:25 +0000 |
|---|---|---|
| committer | mkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-12-20 12:28:25 +0000 |
| commit | 40860710dd1f703a6553793690ffe56c040e55a4 (patch) | |
| tree | 022c21e00d55eed907ff37587379b378acb0e2f4 /libjava/gnu/java/net/protocol/jar/Handler.java | |
| parent | 0a2326d6d6ed56c12e2cf1f458a40d8d43e0c9db (diff) | |
| download | ppe42-gcc-40860710dd1f703a6553793690ffe56c040e55a4.tar.gz ppe42-gcc-40860710dd1f703a6553793690ffe56c040e55a4.zip | |
2003-12-20 Guilhem Lavaux <guilhem@kaffe.org>
* gnu/java/net/URLParseError.java: New file.
* gnu/java/net/protocol/jar/Handler.java
(parseURL): Throw URLParseError if needed, fix '/' handling.
* java/net/URL.java (URL): Catch URLParseError and
transform it into a MalformedURLException.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@74877 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java/net/protocol/jar/Handler.java')
| -rw-r--r-- | libjava/gnu/java/net/protocol/jar/Handler.java | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/libjava/gnu/java/net/protocol/jar/Handler.java b/libjava/gnu/java/net/protocol/jar/Handler.java index 76ba6fddf3b..d1235032c38 100644 --- a/libjava/gnu/java/net/protocol/jar/Handler.java +++ b/libjava/gnu/java/net/protocol/jar/Handler.java @@ -38,7 +38,9 @@ exception statement from your version. */ package gnu.java.net.protocol.jar; +import gnu.java.net.URLParseError; import java.io.IOException; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.net.URLStreamHandler; @@ -91,10 +93,11 @@ public class Handler extends URLStreamHandler if (url_string.startsWith("/")) { //url string is an absolute path int idx = file.lastIndexOf ("!/"); - if (idx == -1) //context path is weird - file = file + "!" + url_string; - else - file = file.substring (0, idx + 1) + url_string; + + if (idx < 0) + throw new URLParseError("no !/ in spec"); + + file = file.substring (0, idx + 1) + url_string; } else { @@ -108,7 +111,7 @@ public class Handler extends URLStreamHandler // according to Java API Documentation, here is a little different // with URLStreamHandler.parseURL // but JDK seems doesn't handle it well - file = file + "/" + url_string; + file = file.substring(0, idx + 1) + url_string; } setURL (url, "jar", url.getHost(), url.getPort(), file, null); @@ -125,9 +128,22 @@ public class Handler extends URLStreamHandler // Skip remains of protocol url_string = url_string.substring (start, end); + + int jar_stop; + if ((jar_stop = url_string.indexOf("!/")) < 0) + throw new URLParseError("no !/ in spec"); + + try + { + new URL(url_string.substring (0, jar_stop)); + } + catch (MalformedURLException e) + { + throw new URLParseError("invalid inner URL: " + e.getMessage()); + } if (!url.getProtocol().equals ("jar") ) - return; + throw new URLParseError("unexpected protocol " + url.getProtocol()); setURL (url, "jar", url.getHost(), url.getPort(), url_string, null); } |

