1
0
mirror of https://github.com/OpenTTD/OpenTTD.git synced 2025-08-19 12:39:11 +00:00

(svn r21898) -Fix [FS#4438]: using a pointer-iterator and adding things (thus reallocating) to the iterated array caused OpenTTD to crash on invalid pointers

This commit is contained in:
rubidium
2011-01-23 11:20:55 +00:00
parent 0de8332366
commit 81ef0dbcfc

View File

@@ -878,10 +878,13 @@ void ClientNetworkContentSocketHandler::ReverseLookupTreeDependency(ConstContent
{
*tree.Append() = child;
/* First find all direct parents */
for (ConstContentIterator iter = tree.Begin(); iter != tree.End(); iter++) {
/* First find all direct parents. We can't use the "normal" iterator as
* we are including stuff into the vector and as such the vector's data
* store can be reallocated (and thus move), which means out iterating
* pointer gets invalid. So fall back to the indices. */
for (uint i = 0; i < tree.Length(); i++) {
ConstContentVector parents;
this->ReverseLookupDependency(parents, *iter);
this->ReverseLookupDependency(parents, tree[i]);
for (ConstContentIterator piter = parents.Begin(); piter != parents.End(); piter++) {
tree.Include(*piter);