Hello,

I think I have found a bug in camel-core and I'm hoping someone may be
able confirm if I am right about this.  In camel it is not possible
for a URI endpoint to have a query parameter with a value containing
an '&' symbol.  The bug affects all endpoint types

For example its possible that a camel route may consume from an FTP
endpoint with a password conatining an '&' symbol.  For example if I
wanted to connect to my FTP server in passive mode with a password of
"Guns&Roses" I would expect the URI to be

ftp://neil@myHost/myDir?password=Guns%26Roses&passiveMode=true

When Camel attempts to parse this URI it mistakenly divides
"password=Guns%26Roses&passiveMode=true" into 3 parameters:
password=Guns, Roses=null, passiveMode=true.

I've followed the code through and this appears to be a bug in the
"parseParameters" method of URISupport class within camel-core.  This
method uses Java's URI::getQuery method to return the query part of
the string. This string is then split at '&' characters.  The problem
is the URI::getQuery method will return the "decoded" query part of
the URI, when the "encoded" query part should be used  (We require the
string "?password=Guns%26Roses&passiveMode=true" when URI::getQuery
returns "?password=Guns&Roses&passiveMode=true").  This then causes
the split by '&' to split the query parameters incorrectly

The Javadoc for
URI(http://docs.oracle.com/javase/7/docs/api/java/net/URI.html)
confims "The getUserInfo, getPath, getQuery, getFragment,
getAuthority, and getSchemeSpecificPart methods decode any escaped
octets in their corresponding components. The strings returned by
these methods may contain both other characters and illegal
characters, and will not contain any escaped octets.".  Therefore the
code should be altered to retrieve the enncoded query string.  This
would be a very simple as would simply mean modifying the line "String
query = uri.getQuery();" to "String query = uri.getRawQuery()".

Could a camel developer confirm if they agree that this is a bug.  If
it is I would be happy to have a go at contributing the fix with a
unit test if some one can advise me how I should go about doing this

Thanks
Neil

Reply via email to