summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2012-11-19 16:52:38 -0800
committerYehuda Sadeh <yehuda@inktank.com>2012-11-21 13:11:41 -0800
commit17e4c0df44781f5ff1d74f3800722452b6a0fc58 (patch)
treed3a4c7ee5dcc86b361408c98db20a4c0655310de
parentcd18b9f43cce68ac3d8f109e82a5b603f9caad9b (diff)
downloadceph-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.cc25
-rw-r--r--src/rgw/rgw_op.h8
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();