Skip to content

Commit

Permalink
s3_auth: Fix hash calculation (#10567)
Browse files Browse the repository at this point in the history
  • Loading branch information
maskit committed Oct 9, 2023
1 parent ece783b commit 334839c
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 2 deletions.
4 changes: 4 additions & 0 deletions plugins/s3_auth/aws_auth_v4.cc
Expand Up @@ -93,6 +93,10 @@ uriEncode(const String &in, bool isObjectName)
} else if (isObjectName && i == '/') {
/* Encode the forward slash character, '/', everywhere except in the object key name. */
result << "/";
} else if (i == '+') {
/* Only written in the example code, but a plus sign is treated as a space regardless of the position and it must be encoded
* as "%20" instead of "%2B" */
result << "%20";
} else {
/* Letters in the hexadecimal value must be upper-case, for example "%1A". */
result << "%" << std::uppercase << std::setfill('0') << std::setw(2) << std::hex << (int)i;
Expand Down
4 changes: 2 additions & 2 deletions plugins/s3_auth/unit_tests/test_aws_auth_v4.cc
Expand Up @@ -57,7 +57,7 @@ TEST_CASE("uriEncode(): encode reserved chars in a name which is not object name
String encoded = uriEncode(in, /* isObjectName */ false);

CHECK(3 * in.length() == encoded.length()); /* size of "%NN" = 3 */
CHECK_FALSE(encoded.compare("%20%2F%21%22%23%24%25%26%27%28%29%2A%2B%2C%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D"));
CHECK_FALSE(encoded.compare("%20%2F%21%22%23%24%25%26%27%28%29%2A%20%2C%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D"));
}

TEST_CASE("uriEncode(): encode reserved chars in an object name", "[AWS][auth][utility]")
Expand All @@ -66,7 +66,7 @@ TEST_CASE("uriEncode(): encode reserved chars in an object name", "[AWS][auth][u
String encoded = uriEncode(in, /* isObjectName */ true);

CHECK(3 * in.length() - 2 == encoded.length()); /* size of "%NN" = 3, '/' is not encoded */
CHECK_FALSE(encoded.compare("%20/%21%22%23%24%25%26%27%28%29%2A%2B%2C%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D"));
CHECK_FALSE(encoded.compare("%20/%21%22%23%24%25%26%27%28%29%2A%20%2C%3A%3B%3C%3D%3E%3F%40%5B%5C%5D%5E%60%7B%7C%7D"));
}

TEST_CASE("isUriEncoded(): check an empty input", "[AWS][auth][utility]")
Expand Down

0 comments on commit 334839c

Please sign in to comment.