You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/01/05 11:43:17 UTC

svn commit: r492972 - in /harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/net/URLStreamHandler.java test/java/tests/api/java/net/URLTest.java

Author: tellison
Date: Fri Jan  5 02:43:16 2007
New Revision: 492972

URL: http://svn.apache.org/viewvc?view=rev&rev=492972
Log:
Apply patch HARMONY-2941 ([classlib][luni]No exception was thrown when parseURL with limit = Integer.MIN_VALUE)

Modified:
    harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLStreamHandler.java
    harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLTest.java

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLStreamHandler.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLStreamHandler.java?view=diff&rev=492972&r1=492971&r2=492972
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLStreamHandler.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/net/URLStreamHandler.java Fri Jan  5 02:43:16 2007
@@ -85,7 +85,15 @@
 	 * @see URL
 	 */
 	protected void parseURL(URL u, String str, int start, int end) {
-		if (end < start) {
+        // For compatibility, refer to Harmony-2941
+        if (str.startsWith("//", start) && str.indexOf('/', start + 2) == -1
+                && end <= Integer.MIN_VALUE + 1) {
+            throw new StringIndexOutOfBoundsException(end - 2 - start);
+        }
+        if (end < start) {
+            if (this != u.strmHandler) {
+                throw new SecurityException();
+            }
             return;
         }
 		String parseString = "";

Modified: harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLTest.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLTest.java?view=diff&rev=492972&r1=492971&r2=492972
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLTest.java (original)
+++ harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/net/URLTest.java Fri Jan  5 02:43:16 2007
@@ -35,7 +35,6 @@
 import java.security.Permission;
 import java.util.ArrayList;
 import java.util.List;
-
 import tests.support.Support_Configuration;
 import tests.support.resource.Support_Resources;
 
@@ -1322,4 +1321,53 @@
 		}
 
 	}
+    static class MyURLStreamHandler extends URLStreamHandler {
+
+        @Override
+        protected URLConnection openConnection(URL arg0) throws IOException {
+            return null;
+        }
+
+        public void parse(URL url, String spec, int start, int end) {
+            parseURL(url, spec, start, end);
+        }
+    }
+
+    static class MyURLStreamHandlerFactory implements URLStreamHandlerFactory {
+
+        public static MyURLStreamHandler handler = new MyURLStreamHandler();
+
+        public URLStreamHandler createURLStreamHandler(String arg0) {
+            handler = new MyURLStreamHandler();
+            return handler;
+        }
+
+    }
+
+    // Regression test for harmony-2941
+    public void test_URLStreamHandler_parseURL() throws MalformedURLException {
+        URL.setURLStreamHandlerFactory(new MyURLStreamHandlerFactory());
+        URL url = new URL("null://localhost");
+        MyURLStreamHandler handler = MyURLStreamHandlerFactory.handler;
+        try {
+            handler.parse(url, "//", 0, Integer.MIN_VALUE);
+            fail("Should throw SIOOBE.");
+        } catch (StringIndexOutOfBoundsException e) {
+            // expected;
+        }
+        try {
+            handler.parse(url, "1234//", 4, Integer.MIN_VALUE);
+            fail("Should throw SIOOBE.");
+        } catch (StringIndexOutOfBoundsException e) {
+            // expected;
+        }
+        try {
+            handler.parse(url, "1", -1, 0);
+            fail("Should throw SIOOBE.");
+        } catch (StringIndexOutOfBoundsException e) {
+            // expected;
+        }
+        handler.parse(url, "1", 3, 2);
+        handler.parse(url, "11", 1, Integer.MIN_VALUE);
+    }
 }