Again, but with the patch inlined.

On Sunday, March 16, 2003, at 10:20 PM, Michael Becke wrote:

Attached is a patch that switches redirect processing from using URL to URI. The only reason for doing this is to avoid setting the system property "java.protocol.handler.pkgs" to "com.sun.net.ssl.internal.www.protocol" when using HTTPS in pre 1.4 JVMs. Please let me know if you think this is worthwhile.

Mike


Index: src/java/org/apache/commons/httpclient/HttpMethodBase.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/httpclient/src/java/org/apache/commons/ httpclient/HttpMethodBase.java,v
retrieving revision 1.123
diff -u -r1.123 HttpMethodBase.java
--- src/java/org/apache/commons/httpclient/HttpMethodBase.java 13 Mar 2003 17:51:28 -0000 1.123
+++ src/java/org/apache/commons/httpclient/HttpMethodBase.java 17 Mar 2003 03:14:40 -0000
@@ -68,14 +68,12 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.InterruptedIOException;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.HashSet;
import java.util.Set;


-import org.apache.commons.httpclient.cookie.MalformedCookieException;
 import org.apache.commons.httpclient.cookie.CookiePolicy;
 import org.apache.commons.httpclient.cookie.CookieSpec;
+import org.apache.commons.httpclient.cookie.MalformedCookieException;
 import org.apache.commons.httpclient.protocol.Protocol;
 import org.apache.commons.httpclient.util.URIUtil;
 import org.apache.commons.logging.Log;
@@ -128,7 +126,7 @@
  * @author <a href="mailto:[EMAIL PROTECTED]">dIon Gillard</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Jeff Dever</a>
  * @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
- * @author Ortwin GlÔøΩ
+ * @author Ortwin GlÔøΩck
  * @author Eric Johnson
  * @author Michael Becke
  * @author <a href="mailto:[EMAIL PROTECTED]">Oleg Kalnichevski</a>
@@ -1074,33 +1072,37 @@

         //rfc2616 demands the location value be a complete URI
         //Location       = "Location" ":" absoluteURI
-        URL redirectUrl = null;
-        URL currentUrl = null;
+        URI redirectUri = null;
+        URI currentUri = null;

try {
- currentUrl = new URL(conn.getProtocol().getScheme(),
- conn.getHost(), conn.getPort(), this.getPath());
- redirectUrl = new URL(location);
- } catch (MalformedURLException e) {
- if (isStrictMode()) {
- LOG.warn("Redirected location '" + location
- + "' is not acceptable in strict mode");
- return false;
- } else { //location is incomplete, use current values for defaults
- try {
- LOG.debug("Redirect URL is not absolute - parsing as relative");
- redirectUrl = new URL(currentUrl, location);
- } catch (MalformedURLException ex) {
- LOG.warn("Redirected location '" + location
- + "' is malformed");
+ currentUri = new URI(
+ conn.getProtocol().getScheme(),
+ null,
+ conn.getHost(),
+ conn.getPort(),
+ this.getPath()
+ );
+ redirectUri = new URI(location.toCharArray());
+ if (redirectUri.isRelativeURI()) {
+ if (isStrictMode()) {
+ LOG.warn("Redirected location '" + location
+ + "' is not acceptable in strict mode");
return false;
+ } else {
+ //location is incomplete, use current values for defaults
+ LOG.debug("Redirect URI is not absolute - parsing as relative");
+ redirectUri = new URI(currentUri, redirectUri);
}
}
+ } catch (URIException e) {
+ LOG.warn("Redirected location '" + location + "' is malformed");
+ return false;
}


         //check for redirect to a different protocol, host or port
         try {
-            checkValidRedirect(currentUrl, redirectUrl);
+            checkValidRedirect(currentUri, redirectUri);
         } catch (HttpException ex) {
             //LOG the error and let the client handle the redirect
             LOG.warn(ex.getMessage());
@@ -1110,51 +1112,56 @@
         //update the current location with the redirect location.
         //avoiding use of URL.getPath() and URL.getQuery() to keep
         //jdk1.2 comliance.
-        setPath(URIUtil.getPath(redirectUrl.toString()));
-        setQueryString(URIUtil.getQuery(redirectUrl.toString()));
+        setPath(redirectUri.getEscapedPath());
+        setQueryString(redirectUri.getEscapedQuery());

if (LOG.isDebugEnabled()) {
- LOG.debug("Redirecting from '" + currentUrl.toExternalForm()
- + "' to '" + redirectUrl.toExternalForm());
+ LOG.debug("Redirecting from '" + currentUri.getEscapedURI()
+ + "' to '" + redirectUri.getEscapedURI());
}


         return true;
-
     }

-
/**
- * Check for a valid redirect given the current conn and new url.
+ * Check for a valid redirect given the current conn and new URI.
* Redirect to a different protocol, host or port are checked for validity.
*
- * @param currentUrl The current URL (redirecting from)
- * @param redirectUrl The new URL to redirect to
+ * @param currentUri The current URI (redirecting from)
+ * @param redirectUri The new URI to redirect to
* @throws HttpException if the redirect is invalid
* @since 2.0
*/
- private static void checkValidRedirect(URL currentUrl, URL redirectUrl)
+ private static void checkValidRedirect(URI currentUri, URI redirectUri)
throws HttpException {
LOG.trace("enter HttpMethodBase.checkValidRedirect(HttpConnection, URL)");


- String oldProtocol = currentUrl.getProtocol();
- String newProtocol = redirectUrl.getProtocol();
+ String oldProtocol = currentUri.getScheme();
+ String newProtocol = redirectUri.getScheme();
if (!oldProtocol.equals(newProtocol)) {
throw new HttpException("Redirect from protocol " + oldProtocol
+ " to " + newProtocol + " is not supported");
}


- String oldHost = currentUrl.getHost();
- String newHost = redirectUrl.getHost();
- if (!oldHost.equalsIgnoreCase(newHost)) {
- throw new HttpException("Redirect from host " + oldHost
- + " to " + newHost + " is not supported");
+ try {
+ String oldHost = currentUri.getHost();
+ String newHost = redirectUri.getHost();
+ if (!oldHost.equalsIgnoreCase(newHost)) {
+ throw new HttpException("Redirect from host " + oldHost
+ + " to " + newHost + " is not supported");
+ }
+ } catch (URIException e) {
+ LOG.warn("Error getting URI host", e);
+ throw new HttpException("Invalid Redirect URI from: "
+ + currentUri.getEscapedURI() + " to: " + redirectUri.getEscapedURI()
+ );
}


-        int oldPort = currentUrl.getPort();
+        int oldPort = currentUri.getPort();
         if (oldPort < 0) {
             oldPort = getDefaultPort(oldProtocol);
         }
-        int newPort = redirectUrl.getPort();
+        int newPort = redirectUri.getPort();
         if (newPort < 0) {
             newPort = getDefaultPort(newProtocol);
         }
@@ -1163,7 +1170,6 @@
                     + " to " + newPort + " is not supported");
         }
     }
-

     /**
      * Returns the default port for the given protocol.


--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to