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

Side by Side Diff: webrtc/p2p/base/stun.cc

Issue 2357733002: Fix a stun attribute leak. (Closed)
Patch Set: . Created 4 years, 2 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 /* 1 /*
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 attrs_->resize(0); 333 attrs_->resize(0);
334 334
335 size_t rest = buf->Length() - length_; 335 size_t rest = buf->Length() - length_;
336 while (buf->Length() > rest) { 336 while (buf->Length() > rest) {
337 uint16_t attr_type, attr_length; 337 uint16_t attr_type, attr_length;
338 if (!buf->ReadUInt16(&attr_type)) 338 if (!buf->ReadUInt16(&attr_type))
339 return false; 339 return false;
340 if (!buf->ReadUInt16(&attr_length)) 340 if (!buf->ReadUInt16(&attr_length))
341 return false; 341 return false;
342 342
343 StunAttribute* attr = CreateAttribute(attr_type, attr_length); 343 std::unique_ptr<StunAttribute> attr(
344 CreateAttribute(attr_type, attr_length));
344 if (!attr) { 345 if (!attr) {
345 // Skip any unknown or malformed attributes. 346 // Skip any unknown or malformed attributes.
346 if ((attr_length % 4) != 0) { 347 if ((attr_length % 4) != 0) {
347 attr_length += (4 - (attr_length % 4)); 348 attr_length += (4 - (attr_length % 4));
348 } 349 }
349 if (!buf->Consume(attr_length)) 350 if (!buf->Consume(attr_length))
350 return false; 351 return false;
351 } else { 352 } else {
352 if (!attr->Read(buf)) 353 if (!attr->Read(buf))
353 return false; 354 return false;
354 attrs_->push_back(attr); 355 // TODO(honghaiz): Change |attrs_| to be a vector of unique_ptrs.
356 attrs_->push_back(attr.release());
355 } 357 }
356 } 358 }
357 359
358 ASSERT(buf->Length() == rest); 360 ASSERT(buf->Length() == rest);
359 return true; 361 return true;
360 } 362 }
361 363
362 bool StunMessage::Write(ByteBufferWriter* buf) const { 364 bool StunMessage::Write(ByteBufferWriter* buf) const {
363 buf->WriteUInt16(type_); 365 buf->WriteUInt16(type_);
364 buf->WriteUInt16(length_); 366 buf->WriteUInt16(length_);
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 digest, sizeof(digest)); 914 digest, sizeof(digest));
913 if (size == 0) { 915 if (size == 0) {
914 return false; 916 return false;
915 } 917 }
916 918
917 *hash = std::string(digest, size); 919 *hash = std::string(digest, size);
918 return true; 920 return true;
919 } 921 }
920 922
921 } // namespace cricket 923 } // namespace cricket
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