Roberto Andrade created WAGON-419:
-------------------------------------

             Summary: HTTP wagons incorrectly encode blank space in URLs 
causing resources to be uploaded/looked up with a "+" sign
                 Key: WAGON-419
                 URL: https://jira.codehaus.org/browse/WAGON-419
             Project: Maven Wagon
          Issue Type: Bug
          Components: wagon-http, wagon-http-lightweight, wagon-webdav
    Affects Versions: 2.6, 2.5, 2.4, 2.3, 2.2, 2.1, 2.0, 1.0
         Environment: Apache Maven 3.1.1 
(0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 11:22:22-0400)
Maven home: /usr/local/Cellar/maven/3.1.1/libexec
Java version: 1.7.0_51, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: US-ASCII
OS name: "mac os x", version: "10.9.4", arch: "x86_64", family: "mac"
            Reporter: Roberto Andrade
            Priority: Minor


The wagons all use 
[{{java.net.URLEncoder.encode}}|http://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html]
 to encode the path components of the URL which uses 
{{application/x-www-form-urlencoded}} format instead of the more generic one 
defined by RFC2396. As documented by the 
[java.net.URL|http://docs.oracle.com/javase/7/docs/api/java/net/URL.html] 
class, this should only be used for HTML/form encoding and not generic URL 
encoding:

{quote}
The URLEncoder and URLDecoder classes can also be used, but only for HTML form 
encoding, which is not the same as the encoding scheme defined in RFC2396.
{quote}

The use of such encoder affects URLs with spaces (i.e.: on the resource path) 
by encoding it to {{+}} instead of the traditional {{%20}} which would 
ultimately result in an actual space being stored on the server when receiving 
a {{PUT}} request. Additionally, the {{application/x-www-form-urlencoded}} 
format should only be used if the HTTP request itself has that as a 
{{Content-Type}} header value, which in the majority of the cases here is not 
the case (the HTTP client will either be sending up the correctly translated 
MIME type, a generic {{application/octet-stream}} or some other form of 
encoding - i.e.: base64, but the URL encoding is completely independent of 
that).

This is probably a known issue given there are {{TODO}} comments on the code 
for every one of the wagons.

I'm submitting a PR on Github with a proposed fix for them all.



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to