diff options
author | Yehuda Sadeh <yehuda@inktank.com> | 2012-11-19 16:52:38 -0800 |
---|---|---|
committer | Yehuda Sadeh <yehuda@inktank.com> | 2012-11-21 13:11:41 -0800 |
commit | 17e4c0df44781f5ff1d74f3800722452b6a0fc58 (patch) | |
tree | d3a4c7ee5dcc86b361408c98db20a4c0655310de | |
parent | cd18b9f43cce68ac3d8f109e82a5b603f9caad9b (diff) | |
download | ceph-17e4c0df44781f5ff1d74f3800722452b6a0fc58.tar.gz |
rgw: fix memory leaks
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit 98a04d76ebffa61c3ba4b033cdd57ac57b2f29f3)
Conflicts:
src/rgw/rgw_op.cc
src/rgw/rgw_op.h
-rw-r--r-- | src/rgw/rgw_op.cc | 25 | ||||
-rw-r--r-- | src/rgw/rgw_op.h | 8 |
2 files changed, 18 insertions, 15 deletions
diff --git a/src/rgw/rgw_op.cc b/src/rgw/rgw_op.cc index c792053dc72..e30b4dff976 100644 --- a/src/rgw/rgw_op.cc +++ b/src/rgw/rgw_op.cc @@ -1303,7 +1303,6 @@ void RGWPutACLs::execute() RGWACLXMLParser_S3 parser(s->cct); RGWAccessControlPolicy_S3 new_policy(s->cct); stringstream ss; - char *orig_data = data; char *new_data = NULL; ACLOwner owner; rgw_obj obj; @@ -1312,27 +1311,29 @@ void RGWPutACLs::execute() if (!parser.init()) { ret = -EINVAL; - goto done; + return; } owner.set_id(s->user.user_id); owner.set_name(s->user.display_name); - if (get_params() < 0) - goto done; + ret = get_params(); + if (ret < 0) + return; ldout(s->cct, 15) << "read len=" << len << " data=" << (data ? data : "") << dendl; if (!s->canned_acl.empty() && len) { ret = -EINVAL; - goto done; + return; } if (!s->canned_acl.empty()) { ret = get_canned_policy(owner, ss); if (ret < 0) - goto done; + return; new_data = strdup(ss.str().c_str()); + free(data); data = new_data; len = ss.str().size(); } @@ -1340,12 +1341,12 @@ void RGWPutACLs::execute() if (!parser.parse(data, len, 1)) { ret = -EACCES; - goto done; + return; } policy = (RGWAccessControlPolicy_S3 *)parser.find_first("AccessControlPolicy"); if (!policy) { ret = -EINVAL; - goto done; + return; } if (s->cct->_conf->subsys.should_gather(ceph_subsys_rgw, 15)) { @@ -1356,7 +1357,7 @@ void RGWPutACLs::execute() ret = policy->rebuild(&owner, new_policy); if (ret < 0) - goto done; + return; if (s->cct->_conf->subsys.should_gather(ceph_subsys_rgw, 15)) { ldout(s->cct, 15) << "New AccessControlPolicy:"; @@ -1368,12 +1369,6 @@ void RGWPutACLs::execute() obj.init(s->bucket, s->object_str); rgwstore->set_atomic(s->obj_ctx, obj); ret = rgwstore->set_attr(s->obj_ctx, obj, RGW_ATTR_ACL, bl); - -done: - free(orig_data); - free(new_data); - - send_response(); } int RGWInitMultipart::verify_permission() diff --git a/src/rgw/rgw_op.h b/src/rgw/rgw_op.h index be4087fa941..7fdd242639e 100644 --- a/src/rgw/rgw_op.h +++ b/src/rgw/rgw_op.h @@ -446,6 +446,10 @@ public: len = 0; data = NULL; } + virtual ~RGWPutACLs() { + free(data); + } + int verify_permission(); void execute(); @@ -497,6 +501,10 @@ public: data = NULL; len = 0; } + virtual ~RGWCompleteMultipart() { + free(data); + } + int verify_permission(); void execute(); |