Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(456)

Side by Side Diff: chrome/common/extensions/permissions/socket_permission.cc

Issue 10832354: Fix memory leaks in extensions::SocketPermission (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/permissions/socket_permission.h" 5 #include "chrome/common/extensions/permissions/socket_permission.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/values.h" 10 #include "base/values.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 APIPermissionDetail* SocketPermission::Clone() const { 83 APIPermissionDetail* SocketPermission::Clone() const {
84 SocketPermission* result = new SocketPermission(permission()); 84 SocketPermission* result = new SocketPermission(permission());
85 result->data_set_ = data_set_; 85 result->data_set_ = data_set_;
86 return result; 86 return result;
87 } 87 }
88 88
89 APIPermissionDetail* SocketPermission::Diff( 89 APIPermissionDetail* SocketPermission::Diff(
90 const APIPermissionDetail* rhs) const { 90 const APIPermissionDetail* rhs) const {
91 CHECK(rhs->permission() == permission()); 91 CHECK(rhs->permission() == permission());
92 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs); 92 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
93 scoped_refptr<SocketPermission> result = new SocketPermission(permission()); 93 SocketPermission* result = new SocketPermission(permission());
94 std::set_difference(data_set_.begin(), data_set_.end(), 94 std::set_difference(data_set_.begin(), data_set_.end(),
95 perm->data_set_.begin(), perm->data_set_.end(), 95 perm->data_set_.begin(), perm->data_set_.end(),
96 std::inserter<std::set<SocketPermissionData> >( 96 std::inserter<std::set<SocketPermissionData> >(
97 result->data_set_, result->data_set_.begin())); 97 result->data_set_, result->data_set_.begin()));
98 return result->data_set_.empty() ? NULL : result.release(); 98 if (result->data_set_.empty()) {
Mihai Parparita -not on Chrome 2012/08/16 22:56:58 As discussed, switching APIPermissionDetail to not
99 delete result;
100 result = NULL;
101 }
102 return result;
103
99 } 104 }
100 105
101 APIPermissionDetail* SocketPermission::Union( 106 APIPermissionDetail* SocketPermission::Union(
102 const APIPermissionDetail* rhs) const { 107 const APIPermissionDetail* rhs) const {
103 CHECK(rhs->permission() == permission()); 108 CHECK(rhs->permission() == permission());
104 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs); 109 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
105 scoped_refptr<SocketPermission> result = new SocketPermission(permission()); 110 SocketPermission* result = new SocketPermission(permission());
106 std::set_union(data_set_.begin(), data_set_.end(), 111 std::set_union(data_set_.begin(), data_set_.end(),
107 perm->data_set_.begin(), perm->data_set_.end(), 112 perm->data_set_.begin(), perm->data_set_.end(),
108 std::inserter<std::set<SocketPermissionData> >( 113 std::inserter<std::set<SocketPermissionData> >(
109 result->data_set_, result->data_set_.begin())); 114 result->data_set_, result->data_set_.begin()));
110 return result->data_set_.empty() ? NULL : result.release(); 115 if (result->data_set_.empty()) {
116 delete result;
117 result = NULL;
118 }
119 return result;
120
111 } 121 }
112 122
113 APIPermissionDetail* SocketPermission::Intersect( 123 APIPermissionDetail* SocketPermission::Intersect(
114 const APIPermissionDetail* rhs) const { 124 const APIPermissionDetail* rhs) const {
115 CHECK(rhs->permission() == permission()); 125 CHECK(rhs->permission() == permission());
116 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs); 126 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
117 scoped_refptr<SocketPermission> result = new SocketPermission(permission()); 127 SocketPermission* result = new SocketPermission(permission());
118 std::set_intersection(data_set_.begin(), data_set_.end(), 128 std::set_intersection(data_set_.begin(), data_set_.end(),
119 perm->data_set_.begin(), perm->data_set_.end(), 129 perm->data_set_.begin(), perm->data_set_.end(),
120 std::inserter<std::set<SocketPermissionData> >( 130 std::inserter<std::set<SocketPermissionData> >(
121 result->data_set_, result->data_set_.begin())); 131 result->data_set_, result->data_set_.begin()));
122 return result->data_set_.empty() ? NULL : result.release(); 132 if (result->data_set_.empty()) {
133 delete result;
134 result = NULL;
135 }
136 return result;
123 } 137 }
124 138
125 void SocketPermission::Write(IPC::Message* m) const { 139 void SocketPermission::Write(IPC::Message* m) const {
126 IPC::WriteParam(m, data_set_); 140 IPC::WriteParam(m, data_set_);
127 } 141 }
128 142
129 bool SocketPermission::Read(const IPC::Message* m, PickleIterator* iter) { 143 bool SocketPermission::Read(const IPC::Message* m, PickleIterator* iter) {
130 return IPC::ReadParam(m, iter, &data_set_); 144 return IPC::ReadParam(m, iter, &data_set_);
131 } 145 }
132 146
133 void SocketPermission::Log(std::string* log) const { 147 void SocketPermission::Log(std::string* log) const {
134 IPC::LogParam(data_set_, log); 148 IPC::LogParam(data_set_, log);
135 } 149 }
136 150
137 } // namespace extensions 151 } // namespace extensions
138 152
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698