This repository was archived by the owner on Sep 30, 2024. It is now read-only.
forked from pfig/net-amazon-s3
-
Notifications
You must be signed in to change notification settings - Fork 36
This repository was archived by the owner on Sep 30, 2024. It is now read-only.
Tilde escaped in _urlencode leads to SignatureDoesNotMatch error #64
Copy link
Copy link
Open
Description
See https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html for a list for the unreserved characters for V4 signatures, which includes the ~, however, _urlencode() did also encode those. As a consequence put requests for a key with a tilde in it resulted in SignatureDoesNotMatch errors.
After below fix it works for me. BTW: Amazon uses the same unreserved list as URI::Escape (https://metacpan.org/pod/URI::Escape), so not specifying nothing would also work (as it is used in Net/Amazon/S3/Signature/V4Implementation.pm:
305: map { tr/+/ /; uri_escape( uri_unescape( $_ ) ) } # escape all non-unreserved chars
diff --git a/lib/Net/Amazon/S3.pm b/lib/Net/Amazon/S3.pm
index b74c302..c4edfd2 100755
--- a/lib/Net/Amazon/S3.pm
+++ b/lib/Net/Amazon/S3.pm
@@ -963,7 +963,7 @@ sub _remember_errors {
sub _urlencode {
my ( $self, $unencoded ) = @_;
- return uri_escape_utf8( $unencoded, '^A-Za-z0-9_\-\.' );
+ return uri_escape_utf8( $unencoded, '^A-Za-z0-9_\-\.\~' );
}
1;I could not test it myself, however, I would also assume that these changes are needed, also:
diff --git a/lib/Net/Amazon/S3/Request/ListMultipartUploads.pm b/lib/Net/Amazon/S3/Request/ListMultipartUploads.pm
index e299e2f..743ea27 100644
--- a/lib/Net/Amazon/S3/Request/ListMultipartUploads.pm
+++ b/lib/Net/Amazon/S3/Request/ListMultipartUploads.pm
@@ -42,7 +42,7 @@ sub http_request {
sub _urlencode {
my ( $self, $unencoded ) = @_;
- return uri_escape_utf8( $unencoded, '^A-Za-z0-9_-' );
+ return uri_escape_utf8( $unencoded, '^A-Za-z0-9_\-~' );
}
1;
diff --git a/lib/Net/Amazon/S3/Request/ListVersions.pm b/lib/Net/Amazon/S3/Request/ListVersions.pm
index ddb78df..68a3588 100644
--- a/lib/Net/Amazon/S3/Request/ListVersions.pm
+++ b/lib/Net/Amazon/S3/Request/ListVersions.pm
@@ -40,7 +40,7 @@ sub http_request {
sub _urlencode {
my ( $self, $unencoded ) = @_;
- return uri_escape_utf8( $unencoded, '^A-Za-z0-9_-' );
+ return uri_escape_utf8( $unencoded, '^A-Za-z0-9_\-~' );
}
1;Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels