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

Side by Side Diff: third_party/WebKit/Source/wtf/Vector.h

Issue 2657173002: Disallow sequences with lengths exceeding max allocation supported. (Closed)
Patch Set: add expected output Created 3 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. 2 * Copyright (C) 2005, 2006, 2007, 2008 Apple Inc. All rights reserved.
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 317 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 }; 328 };
329 329
330 template <typename T, bool hasInlineCapacity, typename Allocator> 330 template <typename T, bool hasInlineCapacity, typename Allocator>
331 class VectorBufferBase { 331 class VectorBufferBase {
332 WTF_MAKE_NONCOPYABLE(VectorBufferBase); 332 WTF_MAKE_NONCOPYABLE(VectorBufferBase);
333 DISALLOW_NEW(); 333 DISALLOW_NEW();
334 334
335 public: 335 public:
336 void allocateBuffer(size_t newCapacity) { 336 void allocateBuffer(size_t newCapacity) {
337 DCHECK(newCapacity); 337 DCHECK(newCapacity);
338 DCHECK(newCapacity <=
Yuta Kitamura 2017/01/30 07:19:42 nit+optional: Use DCHECK_LE?
sof 2017/01/31 21:01:43 yes, done.
339 Allocator::template maxElementCountInBackingStore<T>());
338 size_t sizeToAllocate = allocationSize(newCapacity); 340 size_t sizeToAllocate = allocationSize(newCapacity);
339 if (hasInlineCapacity) 341 if (hasInlineCapacity)
340 m_buffer = 342 m_buffer =
341 Allocator::template allocateInlineVectorBacking<T>(sizeToAllocate); 343 Allocator::template allocateInlineVectorBacking<T>(sizeToAllocate);
342 else 344 else
343 m_buffer = Allocator::template allocateVectorBacking<T>(sizeToAllocate); 345 m_buffer = Allocator::template allocateVectorBacking<T>(sizeToAllocate);
344 m_capacity = sizeToAllocate / sizeof(T); 346 m_capacity = sizeToAllocate / sizeof(T);
345 } 347 }
346 348
347 void allocateExpandedBuffer(size_t newCapacity) { 349 void allocateExpandedBuffer(size_t newCapacity) {
(...skipping 644 matching lines...) Expand 10 before | Expand all | Expand 10 after
992 994
993 template <typename Iterator> 995 template <typename Iterator>
994 void appendRange(Iterator start, Iterator end); 996 void appendRange(Iterator start, Iterator end);
995 997
996 void swap(Vector& other) { 998 void swap(Vector& other) {
997 Base::swapVectorBuffer(other, OffsetRange(), OffsetRange()); 999 Base::swapVectorBuffer(other, OffsetRange(), OffsetRange());
998 } 1000 }
999 1001
1000 void reverse(); 1002 void reverse();
1001 1003
1004 // Maximum element count supported; allocating a vector
1005 // buffer with a larger count will fail.
1006 static size_t maxCapacity() {
1007 return Allocator::template maxElementCountInBackingStore<T>();
1008 }
1009
1002 template <typename VisitorDispatcher> 1010 template <typename VisitorDispatcher>
1003 void trace(VisitorDispatcher); 1011 void trace(VisitorDispatcher);
1004 1012
1005 class GCForbiddenScope { 1013 class GCForbiddenScope {
1006 STACK_ALLOCATED(); 1014 STACK_ALLOCATED();
1007 1015
1008 public: 1016 public:
1009 GCForbiddenScope() { Allocator::enterGCForbiddenScope(); } 1017 GCForbiddenScope() { Allocator::enterGCForbiddenScope(); }
1010 ~GCForbiddenScope() { Allocator::leaveGCForbiddenScope(); } 1018 ~GCForbiddenScope() { Allocator::leaveGCForbiddenScope(); }
1011 }; 1019 };
(...skipping 607 matching lines...) Expand 10 before | Expand all | Expand 10 after
1619 visitor, *const_cast<T*>(bufferEntry)); 1627 visitor, *const_cast<T*>(bufferEntry));
1620 checkUnusedSlots(buffer() + size(), buffer() + capacity()); 1628 checkUnusedSlots(buffer() + size(), buffer() + capacity());
1621 } 1629 }
1622 } 1630 }
1623 1631
1624 } // namespace WTF 1632 } // namespace WTF
1625 1633
1626 using WTF::Vector; 1634 using WTF::Vector;
1627 1635
1628 #endif // WTF_Vector_h 1636 #endif // WTF_Vector_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698