This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: FYI: Patch: gnu.java.net.protocol.jar.Handler


Michael Koch wrote:

On Fri, Dec 19, 2003 at 06:28:00PM +0100, Guilhem Lavaux wrote:


Michael Koch wrote:



Hi list,


I commited the attached patch to merge gnu.java.net.protocol.jar.Handler with classpath again. This also fixes one mauve testcase and gives room for more fixes to jar URLs.






I've already written something concerning Jar handlers and it appeared that sun is throwing an Error in the sub-handler if the jar URL is mispelled: it is then possible to throw an InvalidURLException (or something like that) in URL parsers when the URL is mispelled. To be able not to confuse things, I had overridden Error and throwed this "special" error in parseUrl.

Unfortunately, the patch didn't come to classpath's CVS ...



Can you send me the patch for testing and probably commiting to libgcj while classpath CVS is still down ?



Here is the patch against my latest classpath snapshot. But please excuse me, I haven't fixed the spaces...

Guilhem.
--- /home/guilhem/ext2/PROJECTS/classpath/gnu/java/net/protocol/jar/Handler.java	2003-12-02 18:58:25.000000000 +0100
+++ gnu/java/net/protocol/jar/Handler.java	2003-12-19 18:41:33.000000000 +0100
@@ -42,6 +42,8 @@
 import java.net.URL;
 import java.net.URLConnection;
 import java.net.URLStreamHandler;
+import java.net.MalformedURLException;
+import gnu.java.net.URLParseError;
 
 /**
  * @author Kresten Krab Thorup <krab@gnu.org>
@@ -88,13 +90,12 @@
         && file != "")
       { //has context url
 	url_string = url_string.substring (start, end);
-        if (url_string.startsWith("/"))
+        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 +109,7 @@
               // 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 +126,23 @@
     
     // 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);
   }
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ gnu/java/net/URLParseError.java	2003-10-29 18:45:53.000000000 +0100
@@ -0,0 +1,56 @@
+/* URLParseError.java -- Helps bypassing the exception limitation for
+   parseUrl
+   Copyright (C) 2003 Free Software Foundation, Inc.
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+ 
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+package gnu.java.net;
+
+/**
+ * This class helps the people writing protocols to report URL parse
+ * errors in parseUrl as this method cannot report other exceptions
+ * than Errors.
+ *
+ * The main drawback is that it uses the Error mechanism which should not
+ * be used for that type of error reporting.
+ *
+ * @author Guilhem Lavaux <guilhem@kaffe.org>
+ */
+
+public class URLParseError extends Error {
+	public URLParseError(String msg)
+	{
+		super(msg);
+	}
+}

Attachment: pgp00000.pgp
Description: PGP signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]