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

Unified 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: Update 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/valgrind/memcheck/suppressions.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/permissions/socket_permission.cc
diff --git a/chrome/common/extensions/permissions/socket_permission.cc b/chrome/common/extensions/permissions/socket_permission.cc
index e21eb9faf38a10db4175ae272af12cc8839a4c9c..8a2c5e8f17fbe7cb958d8beca0348fbb422fc728 100644
--- a/chrome/common/extensions/permissions/socket_permission.cc
+++ b/chrome/common/extensions/permissions/socket_permission.cc
@@ -90,36 +90,48 @@ APIPermissionDetail* SocketPermission::Diff(
const APIPermissionDetail* rhs) const {
CHECK(rhs->permission() == permission());
const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
- scoped_refptr<SocketPermission> result = new SocketPermission(permission());
+ SocketPermission* result = new SocketPermission(permission());
std::set_difference(data_set_.begin(), data_set_.end(),
perm->data_set_.begin(), perm->data_set_.end(),
std::inserter<std::set<SocketPermissionData> >(
result->data_set_, result->data_set_.begin()));
- return result->data_set_.empty() ? NULL : result.release();
+ if (result->data_set_.empty()) {
+ scoped_refptr<SocketPermission> p(result);
+ result = NULL;
+ }
+ return result;
}
APIPermissionDetail* SocketPermission::Union(
const APIPermissionDetail* rhs) const {
CHECK(rhs->permission() == permission());
const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
- scoped_refptr<SocketPermission> result = new SocketPermission(permission());
+ SocketPermission* result = new SocketPermission(permission());
std::set_union(data_set_.begin(), data_set_.end(),
perm->data_set_.begin(), perm->data_set_.end(),
std::inserter<std::set<SocketPermissionData> >(
result->data_set_, result->data_set_.begin()));
- return result->data_set_.empty() ? NULL : result.release();
+ if (result->data_set_.empty()) {
+ scoped_refptr<SocketPermission> p(result);
+ result = NULL;
+ }
+ return result;
}
APIPermissionDetail* SocketPermission::Intersect(
const APIPermissionDetail* rhs) const {
CHECK(rhs->permission() == permission());
const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
- scoped_refptr<SocketPermission> result = new SocketPermission(permission());
+ SocketPermission* result = new SocketPermission(permission());
std::set_intersection(data_set_.begin(), data_set_.end(),
perm->data_set_.begin(), perm->data_set_.end(),
std::inserter<std::set<SocketPermissionData> >(
result->data_set_, result->data_set_.begin()));
- return result->data_set_.empty() ? NULL : result.release();
+ if (result->data_set_.empty()) {
+ scoped_refptr<SocketPermission> p(result);
+ result = NULL;
+ }
+ return result;
}
void SocketPermission::Write(IPC::Message* m) const {
« no previous file with comments | « no previous file | tools/valgrind/memcheck/suppressions.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698