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

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: Rebase 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 | tools/valgrind/memcheck/suppressions.txt » ('j') | 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()) {
99 scoped_refptr<SocketPermission> p(result);
Mihai Parparita -not on Chrome 2012/08/17 18:01:15 BTW, I think result->Release() would have been eno
100 result = NULL;
101 }
102 return result;
99 } 103 }
100 104
101 APIPermissionDetail* SocketPermission::Union( 105 APIPermissionDetail* SocketPermission::Union(
102 const APIPermissionDetail* rhs) const { 106 const APIPermissionDetail* rhs) const {
103 CHECK(rhs->permission() == permission()); 107 CHECK(rhs->permission() == permission());
104 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs); 108 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
105 scoped_refptr<SocketPermission> result = new SocketPermission(permission()); 109 SocketPermission* result = new SocketPermission(permission());
106 std::set_union(data_set_.begin(), data_set_.end(), 110 std::set_union(data_set_.begin(), data_set_.end(),
107 perm->data_set_.begin(), perm->data_set_.end(), 111 perm->data_set_.begin(), perm->data_set_.end(),
108 std::inserter<std::set<SocketPermissionData> >( 112 std::inserter<std::set<SocketPermissionData> >(
109 result->data_set_, result->data_set_.begin())); 113 result->data_set_, result->data_set_.begin()));
110 return result->data_set_.empty() ? NULL : result.release(); 114 if (result->data_set_.empty()) {
115 scoped_refptr<SocketPermission> p(result);
116 result = NULL;
117 }
118 return result;
111 } 119 }
112 120
113 APIPermissionDetail* SocketPermission::Intersect( 121 APIPermissionDetail* SocketPermission::Intersect(
114 const APIPermissionDetail* rhs) const { 122 const APIPermissionDetail* rhs) const {
115 CHECK(rhs->permission() == permission()); 123 CHECK(rhs->permission() == permission());
116 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs); 124 const SocketPermission* perm = static_cast<const SocketPermission*>(rhs);
117 scoped_refptr<SocketPermission> result = new SocketPermission(permission()); 125 SocketPermission* result = new SocketPermission(permission());
118 std::set_intersection(data_set_.begin(), data_set_.end(), 126 std::set_intersection(data_set_.begin(), data_set_.end(),
119 perm->data_set_.begin(), perm->data_set_.end(), 127 perm->data_set_.begin(), perm->data_set_.end(),
120 std::inserter<std::set<SocketPermissionData> >( 128 std::inserter<std::set<SocketPermissionData> >(
121 result->data_set_, result->data_set_.begin())); 129 result->data_set_, result->data_set_.begin()));
122 return result->data_set_.empty() ? NULL : result.release(); 130 if (result->data_set_.empty()) {
131 scoped_refptr<SocketPermission> p(result);
132 result = NULL;
133 }
134 return result;
123 } 135 }
124 136
125 void SocketPermission::Write(IPC::Message* m) const { 137 void SocketPermission::Write(IPC::Message* m) const {
126 IPC::WriteParam(m, data_set_); 138 IPC::WriteParam(m, data_set_);
127 } 139 }
128 140
129 bool SocketPermission::Read(const IPC::Message* m, PickleIterator* iter) { 141 bool SocketPermission::Read(const IPC::Message* m, PickleIterator* iter) {
130 return IPC::ReadParam(m, iter, &data_set_); 142 return IPC::ReadParam(m, iter, &data_set_);
131 } 143 }
132 144
133 void SocketPermission::Log(std::string* log) const { 145 void SocketPermission::Log(std::string* log) const {
134 IPC::LogParam(data_set_, log); 146 IPC::LogParam(data_set_, log);
135 } 147 }
136 148
137 } // namespace extensions 149 } // namespace extensions
138 150
OLDNEW
« 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