2012/1/18  <ma...@apache.org>:
> Author: markt
> Date: Wed Jan 18 11:51:53 2012
> New Revision: 1232843
>
> URL: http://svn.apache.org/viewvc?rev=1232843&view=rev
> Log:
> Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=52480
> When converting class path entries from URLs to files/directories,
> ensure that any URL encoded characters are converted. Fixes JSP
> compilation with javac when Tomcat is installed at a path that includes
> spaces.


I wonder why this code performs substring() calls upon textual value of the URL.
Couldn't it just call URL.getPath() ?

(In the opposite way the conversion would be done via
file.toURI().toURL().toExternalForm() )

Best regards,
Konstantin Kolinko
>
> Modified:
>    tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
>
> Modified: tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java
> URL: 
> http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java?rev=1232843&r1=1232842&r2=1232843&view=diff
> ==============================================================================
> --- tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java (original)
> +++ tomcat/trunk/java/org/apache/catalina/loader/WebappLoader.java Wed Jan 18 
> 11:51:53 2012
> @@ -28,11 +28,13 @@ import java.io.FilePermission;
>  import java.io.IOException;
>  import java.io.InputStream;
>  import java.io.OutputStream;
> +import java.io.UnsupportedEncodingException;
>  import java.lang.reflect.Constructor;
>  import java.lang.reflect.Method;
>  import java.net.MalformedURLException;
>  import java.net.URL;
>  import java.net.URLClassLoader;
> +import java.net.URLDecoder;
>  import java.net.URLStreamHandlerFactory;
>  import java.util.ArrayList;
>  import java.util.jar.JarFile;
> @@ -1027,9 +1029,9 @@ public class WebappLoader extends Lifecy
>             for (int i = 0; i < repositories.length; i++) {
>                 String repository = repositories[i].toString();
>                 if (repository.startsWith("file://"))
> -                    repository = repository.substring(7);
> +                    repository = utf8Decode(repository.substring(7));
>                 else if (repository.startsWith("file:"))
> -                    repository = repository.substring(5);
> +                    repository = utf8Decode(repository.substring(5));
>                 else if (repository.startsWith("jndi:"))
>                     repository =
>                         servletContext.getRealPath(repository.substring(5));
> @@ -1053,6 +1055,16 @@ public class WebappLoader extends Lifecy
>
>     }
>
> +    private String utf8Decode(String input) {
> +        String result = null;
> +        try {
> +            result = URLDecoder.decode(input, "UTF-8");
> +        } catch (UnsupportedEncodingException uee) {
> +            // Impossible. All JVMs are required to support UTF-8.
> +        }
> +        return result;
> +    }
> +
>     // try to extract the classpath from a loader that is not URLClassLoader
>     private String getClasspath( ClassLoader loader ) {
>         try {
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
> For additional commands, e-mail: dev-h...@tomcat.apache.org
>

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

Reply via email to