遇到一个JDK5.0 Update7 以前的bug

一直都使用的是JDK5.0 Update6这个版本,中间也懒得升级。最近在程序的日志里面发现很多这样一个Exception:

java.lang.IllegalArgumentException
at sun.net.www.ParseUtil.decode(ParseUtil.java:179)
at sun.net.www.ParseUtil.toURI(ParseUtil.java:253)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:738)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:669)

查了下JDK,IllegalArgumentException是由于参数传递错误而产生的,但是查遍了程序并没有发现这个错误。于是Google了一下,竟然在sun的官方bug站上发现了,原来是一个bug。比如以下代码如果运行在JDK5.0 Update7以前的版本中就会产生上面的 IllegalArgumentException。

class Bug {
public static void main(String[] args) throws Exception {
// 如果网址中出现 % 就会产生 IllegalArgumentException
java.net.URL url = new java.net.URL("https://www.example.com/%93%fa/");
java.net.URLConnection uc = url.openConnection();
uc.connect();
}
}

这个bug存在于JDK5.0 Update7以前的版本,于是下载了最新的JDK重新运行就没有错误了。

参考资料:
Bug ID: 6274990 REGRESSION: URLConnection.connect() throws Exception with non UTF-8 char
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6274990