Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 689925ca authored by Jason Simmons's avatar Jason Simmons
Browse files

Ensure that Vector::erase() returns a valid iterator

Vector::erase may reallocate the Vector's storage while removing an element.
However, erase() calls begin() before calling removeItemsAt(), thus caching
a pointer the the Vector's old storage.  If the storage is reallocated,
the iterator returned by erase() will be based on the old storage pointer
and will thus be invalid.

Change-Id: I2450c55fd418e6b1c558a4ca7c024573abbaa098
parent d17e3b5f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -188,7 +188,8 @@ public:
     inline void push_back(const TYPE& item)  { insertAt(item, size(), 1); }
     inline void push_front(const TYPE& item) { insertAt(item, 0, 1); }
     inline iterator erase(iterator pos) {
         return begin() + removeItemsAt(pos-array());
         ssize_t index = removeItemsAt(pos-array());
         return begin() + index;
     }

protected: