if (op_ret < 0) {
op_ret = -ERR_INTERNAL_ERROR;
}
+ } catch (buffer::error& err) {
+ ldpp_dout(this, 0) << "ERROR: failed to decode user policies" << dendl;
+ op_ret = -EIO;
} catch (rgw::IAM::PolicyParseException& e) {
ldpp_dout(this, 20) << "failed to parse policy: " << e.what() << dendl;
op_ret = -ERR_MALFORMED_DOC;
map<string, string> policies;
if (auto it = user->get_attrs().find(RGW_ATTR_USER_POLICY); it != user->get_attrs().end()) {
bufferlist bl = it->second;
- decode(policies, bl);
+ try {
+ decode(policies, bl);
+ } catch (buffer::error& err) {
+ ldpp_dout(this, 0) << "ERROR: failed to decode user policies" << dendl;
+ op_ret = -EIO;
+ return;
+ }
if (auto it = policies.find(policy_name); it != policies.end()) {
policy = policies[policy_name];
dump(s->formatter);
s->formatter->close_section();
s->formatter->open_object_section("ListUserPoliciesResult");
bufferlist bl = it->second;
- decode(policies, bl);
+ try {
+ decode(policies, bl);
+ } catch (buffer::error& err) {
+ ldpp_dout(this, 0) << "ERROR: failed to decode user policies" << dendl;
+ op_ret = -EIO;
+ return;
+ }
for (const auto& p : policies) {
s->formatter->open_object_section("PolicyNames");
s->formatter->dump_string("member", p.first);
map<string, string> policies;
if (auto it = user->get_attrs().find(RGW_ATTR_USER_POLICY); it != user->get_attrs().end()) {
bufferlist out_bl = it->second;
- decode(policies, out_bl);
+ try {
+ decode(policies, out_bl);
+ } catch (buffer::error& err) {
+ ldpp_dout(this, 0) << "ERROR: failed to decode user policies" << dendl;
+ op_ret = -EIO;
+ return;
+ }
if (auto p = policies.find(policy_name); p != policies.end()) {
bufferlist in_bl;