Maksim Hadalau created JCLOUDS-1631:
---------------------------------------

             Summary: AWS S3, sign for authorization header failed if query 
part contains special chars
                 Key: JCLOUDS-1631
                 URL: https://issues.apache.org/jira/browse/JCLOUDS-1631
             Project: jclouds
          Issue Type: Bug
          Components: jclouds-blobstore
    Affects Versions: 2.5.0
            Reporter: Maksim Hadalau


Problem description:
Can not list blobs for aws-s3 provider if prefix contains special chars %/&

Steps to reproduce:
try to list blobs with following prefix: 
"Folder (`~!@#$%^&*-_+[]'|<>.?) Name/"

Actual behavior: 
Error: URLDecoder: Incomplete trailing escape (%) pattern

Expected behavior:
provided prefix must be listed

Problem location:

`AWSRequestAuthorizeSignatureV4.signForAuthorizationHeader()`

 
Multimap<String, String> queryMap = 
queryParser().apply(request.getEndpoint().getQuery());

request.getEndpoint().getQuery() - returns a decoded query string
however queryParser() require encoded one

Fix:
Multimap<String, String> queryMap = 
queryParser().apply(request.getEndpoint().getRawQuery());

When jclouds generates a request to the AWS it encodes prefix (encoding all 
special chars in it, including % and &), however calling `getQuery()` returns 
decoded version of query string which lead to unpredictable behavior. 

P.S. required patch in 2.5.x if possible



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to