URLParseError.java: New file.

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.

From-SVN: r74877
This commit is contained in:
Guilhem Lavaux 2003-12-20 12:28:25 +00:00 committed by Michael Koch
parent 1713a69f0a
commit 32ab41edd2
4 changed files with 99 additions and 8 deletions

View file

@ -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);
}