Author: markt
Date: Sat Oct 24 08:49:50 2015
New Revision: 1710313

URL: http://svn.apache.org/viewvc?rev=1710313&view=rev
Log:
Refactor
 - Remove duplicate code
 - Use standard mechanism to pre-load classes for the SecurityManager

Modified:
    tomcat/trunk/java/org/apache/catalina/connector/Response.java
    tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java
    tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java
    tomcat/trunk/java/org/apache/tomcat/util/net/URL.java

Modified: tomcat/trunk/java/org/apache/catalina/connector/Response.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/connector/Response.java?rev=1710313&r1=1710312&r2=1710313&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/connector/Response.java (original)
+++ tomcat/trunk/java/org/apache/catalina/connector/Response.java Sat Oct 24 
08:49:50 2015
@@ -81,9 +81,6 @@ public class Response
     private static final boolean ENFORCE_ENCODING_IN_GET_WRITER;
 
     static {
-        // Ensure that URL is loaded for SM
-        URL.isSchemeChar('c');
-
         ENFORCE_ENCODING_IN_GET_WRITER = Boolean.valueOf(
                 
System.getProperty("org.apache.catalina.connector.Response.ENFORCE_ENCODING_IN_GET_WRITER",
                         "true")).booleanValue();
@@ -1593,7 +1590,7 @@ public class Response
                 throw iae;
             }
 
-        } else if (leadingSlash || !hasScheme(location)) {
+        } else if (leadingSlash || !URL.hasScheme(location)) {
 
             redirectURLCC.recycle();
 
@@ -1769,22 +1766,6 @@ public class Response
     }
 
     /**
-     * Determine if a URI string has a <code>scheme</code> component.
-     */
-    private boolean hasScheme(String uri) {
-        int len = uri.length();
-        for(int i=0; i < len ; i++) {
-            char c = uri.charAt(i);
-            if(c == ':') {
-                return i > 0;
-            } else if(!URL.isSchemeChar(c)) {
-                return false;
-            }
-        }
-        return false;
-    }
-
-    /**
      * Return the specified URL with the specified session identifier
      * suitably encoded.
      *

Modified: tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java?rev=1710313&r1=1710312&r2=1710313&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/security/SecurityClassLoad.java Sat 
Oct 24 08:49:50 2015
@@ -286,6 +286,7 @@ public final class SecurityClassLoad {
                 "util.net.NioBlockingSelector$BlockPoller$2");
         loader.loadClass(basePackage +
                 "util.net.NioBlockingSelector$BlockPoller$3");
+        loader.loadClass(basePackage + "util.net.URL");
         // security
         loader.loadClass(basePackage + "util.security.PrivilegedGetTccl");
         loader.loadClass(basePackage + "util.security.PrivilegedSetTccl");

Modified: tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java?rev=1710313&r1=1710312&r2=1710313&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/valves/rewrite/RewriteValve.java Sat 
Oct 24 08:49:50 2015
@@ -344,7 +344,7 @@ public class RewriteValve extends ValveB
                     // 1. this valve is associated with a context
                     // 2. the url starts with a leading slash
                     // 3. the url isn't absolute
-                    if (context && urlString.charAt(0) == '/' && 
!hasScheme(urlString)) {
+                    if (context && urlString.charAt(0) == '/' && 
!URL.hasScheme(urlString)) {
                         urlString.insert(0, 
request.getContext().getEncodedPath());
                     }
                     response.sendRedirect(urlString.toString());
@@ -735,21 +735,4 @@ public class RewriteValve extends ValveB
             throw new IllegalArgumentException("Invalid flag in: " + line + " 
flag: " + flag);
         }
     }
-
-
-    /**
-     * Determine if a URI string has a <code>scheme</code> component.
-     */
-    protected static boolean hasScheme(StringBuffer uri) {
-        int len = uri.length();
-        for(int i=0; i < len ; i++) {
-            char c = uri.charAt(i);
-            if(c == ':') {
-                return i > 0;
-            } else if(!URL.isSchemeChar(c)) {
-                return false;
-            }
-        }
-        return false;
-    }
 }

Modified: tomcat/trunk/java/org/apache/tomcat/util/net/URL.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/URL.java?rev=1710313&r1=1710312&r2=1710313&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/URL.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/URL.java Sat Oct 24 08:49:50 
2015
@@ -648,10 +648,34 @@ public final class URL implements Serial
     /**
      * Determine if the character is allowed in the scheme of a URI.
      * See RFC 2396, Section 3.1
+     *
+     * @param c The character to test
+     *
+     * @return {@code true} if a the character is allowed, otherwise {@false}
      */
-    public static boolean isSchemeChar(char c) {
+    private static boolean isSchemeChar(char c) {
         return Character.isLetterOrDigit(c) ||
             c == '+' || c == '-' || c == '.';
     }
 
+
+    /**
+     * Determine if a URI string has a <code>scheme</code> component.
+     *
+     * @param uri The URI to test
+     *
+     * @return {@code true} if a scheme is present, otherwise {@false}
+     */
+    public static boolean hasScheme(CharSequence uri) {
+        int len = uri.length();
+        for(int i=0; i < len ; i++) {
+            char c = uri.charAt(i);
+            if(c == ':') {
+                return i > 0;
+            } else if(!URL.isSchemeChar(c)) {
+                return false;
+            }
+        }
+        return false;
+    }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to