add the `in_query=true` argument to `url_decode()` to replace '+' with ' '
Fixes: https://tracker.ceph.com/issues/64189
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit
4bdc5d18dd68b95c6ccd4c0e77a1bd04ad86dbb8)
Conflicts:
src/rgw/rgw_rest_pubsub.cc no topic policy or SetTopicAttributes
src/rgw/rgw_rest_s3.cc no parse_post_action() from
fbbc52aecf3548706b8d5ff49a57200aebc03d54
for (const auto& t : tokens) {
auto pos = t.find("=");
if (pos != string::npos) {
+ constexpr bool in_query = true; // replace '+' with ' '
s->info.args.append(t.substr(0,pos),
- url_decode(t.substr(pos+1, t.size() -1)));
+ url_decode(t.substr(pos+1, t.size() -1), in_query));
}
}
}
if (key == "Action") {
s->info.args.append(key, t.substr(pos + 1, t.size() - 1));
} else if (key == "Name" || key == "TopicArn") {
- const auto value = url_decode(t.substr(pos + 1, t.size() - 1));
+ constexpr bool in_query = true; // replace '+' with ' '
+ const auto value = url_decode(t.substr(pos + 1, t.size() - 1), in_query);
s->info.args.append(key, value);
} else {
update_attribute_map(t, map);
for (const auto& t : tokens) {
auto pos = t.find("=");
if (pos != string::npos) {
+ constexpr bool in_query = true; // replace '+' with ' '
s->info.args.append(t.substr(0,pos),
- url_decode(t.substr(pos+1, t.size() -1)));
+ url_decode(t.substr(pos+1, t.size() -1), in_query));
}
}
}
int RGWPutUserPolicy::get_params()
{
- policy_name = url_decode(s->info.args.get("PolicyName"), true);
- user_name = url_decode(s->info.args.get("UserName"), true);
- policy = url_decode(s->info.args.get("PolicyDocument"), true);
+ policy_name = s->info.args.get("PolicyName");
+ user_name = s->info.args.get("UserName");
+ policy = s->info.args.get("PolicyDocument");
if (policy_name.empty() || user_name.empty() || policy.empty()) {
ldpp_dout(this, 20) << "ERROR: one of policy name, user name or policy document is empty"