Skip to content

Commit

Permalink
trim white spaces before and after the equal sign
Browse files Browse the repository at this point in the history
  • Loading branch information
duke8253 committed Feb 1, 2022
1 parent 4e8d9dc commit 50a8445
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 44 deletions.
36 changes: 12 additions & 24 deletions plugins/s3_auth/aws_auth_v4.cc
Original file line number Diff line number Diff line change
Expand Up @@ -176,39 +176,27 @@ canonicalEncode(const String &in, bool isObjectName)
* @param inLen input character count
* @return pointer to the trimmed string.
*/
std::string
String
trimWhiteSpacesAndSqueezeInnerSpaces(const char *in, size_t inLen)
{
if (nullptr == in || inLen == 0) {
return std::string(in, inLen);
}

const char *first = in;
while (size_t(first - in) < inLen && isspace(*first)) {
first++;
return "";
}

const char *last = in + inLen - 1;
while (last > in && isspace(*last)) {
last--;
}
String in_str = trimWhiteSpaces(String(in, inLen));
String out_str;
char prev_c = '\0';

std::stringstream result;
int consecutiveSpaces = 0;
while (first <= last) {
if (*first == ' ') {
consecutiveSpaces++;
} else {
if (consecutiveSpaces > 0) {
result << ' ';
}
consecutiveSpaces = 0;
result << *first;
for (auto &c : in_str) {
if (!isspace(c)) {
out_str += c;
} else if (isspace(c) && !isspace(prev_c)) {
out_str += ' ';
}
first++;
prev_c = c;
}

return result.str();
return out_str;
}

/**
Expand Down
39 changes: 22 additions & 17 deletions plugins/s3_auth/s3_auth.cc
Original file line number Diff line number Diff line change
Expand Up @@ -554,24 +554,29 @@ S3Config::parse_config(const std::string &config_fname)
}

// Identify the keys (and values if appropriate)
if (0 == strncasecmp(pos2, "secret_key=", 11)) {
set_secret(pos2 + 11);
} else if (0 == strncasecmp(pos2, "access_key=", 11)) {
set_keyid(pos2 + 11);
} else if (0 == strncasecmp(pos2, "session_token=", 14)) {
set_token(pos2 + 14);
} else if (0 == strncasecmp(pos2, "version=", 8)) {
set_version(pos2 + 8);
} else if (0 == strncasecmp(pos2, "virtual_host", 12)) {
std::string key_val(pos2, pos1 - pos2 + 1);
size_t eq_pos = key_val.find_first_of("=");
std::string key_str = trimWhiteSpaces(key_val.substr(0, eq_pos == String::npos ? key_val.size() : eq_pos));
std::string val_str = trimWhiteSpaces(eq_pos == String::npos ? "" : key_val.substr(eq_pos + 1, key_val.size()));

if (key_str == "secret_key") {
set_secret(val_str.c_str());
} else if (key_str == "access_key") {
set_keyid(val_str.c_str());
} else if (key_str == "session_token") {
set_token(val_str.c_str());
} else if (key_str == "version") {
set_version(val_str.c_str());
} else if (key_str == "virtual_host") {
set_virt_host();
} else if (0 == strncasecmp(pos2, "v4-include-headers=", 19)) {
set_include_headers(pos2 + 19);
} else if (0 == strncasecmp(pos2, "v4-exclude-headers=", 19)) {
set_exclude_headers(pos2 + 19);
} else if (0 == strncasecmp(pos2, "v4-region-map=", 14)) {
set_region_map(pos2 + 14);
} else if (0 == strncasecmp(pos2, "expiration=", 11)) {
set_expiration(pos2 + 11);
} else if (key_str == "v4-include-headers") {
set_include_headers(val_str.c_str());
} else if (key_str == "v4-exclude-headers") {
set_exclude_headers(val_str.c_str());
} else if (key_str == "v4-region-map") {
set_region_map(val_str.c_str());
} else if (key_str == "expiration") {
set_expiration(val_str.c_str());
} else {
// ToDo: warnings?
}
Expand Down
6 changes: 3 additions & 3 deletions plugins/s3_auth/unit_tests/test_aws_auth_v4.cc
Original file line number Diff line number Diff line change
Expand Up @@ -263,13 +263,13 @@ TEST_CASE("trimWhiteSpacesAndSqueezeInnerSpaces(): squeeze middle spaces multipl
TEST_CASE("trimWhiteSpacesAndSqueezeInnerSpaces(): does not squeeze middle whitespaces different from spaces, check string",
"[utility]")
{
const char in[] = "Very \t\tImportant \t\t\tMessage";
const char in[] = "Very \t\nImportant \v\f\rMessage";
size_t inLen = strlen(in);

const std::string trimmed = trimWhiteSpacesAndSqueezeInnerSpaces(in, inLen);

CHECK_FALSE(trimmed.compare("Very \t\tImportant \t\t\tMessage"));
CHECK(inLen == trimmed.length());
CHECK_FALSE(trimmed.compare("Very Important Message"));
CHECK(inLen - 5 == trimmed.length());
}

TEST_CASE("trimWhiteSpaces(): trim both, check string", "[utility]")
Expand Down

0 comments on commit 50a8445

Please sign in to comment.