Uploaded image for project: 'jclouds'
  1. jclouds
  2. JCLOUDS-1631

AWS S3, sign for authorization header failed if query part contains special chars

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Major
    • Resolution: Fixed
    • 2.5.0
    • 2.6.1
    • jclouds-blobstore

    Description

      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

      PR https://github.com/apache/jclouds/pull/200

      Attachments

        Activity

          People

            gaul Andrew Gaul
            hmaksim Maksim Hadalau
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - Not Specified
                Not Specified
                Remaining:
                Remaining Estimate - 0h
                0h
                Logged:
                Time Spent - 50m
                50m