fix access to free()d memory
authorOswald Buddenhagen <oswald.buddenhagen@nokia.com>
Fri, 15 Jul 2011 13:39:27 +0000 (15:39 +0200)
committerQt by Nokia <qt-info@nokia.com>
Fri, 15 Jul 2011 14:00:06 +0000 (16:00 +0200)
the 'item' reference may become invalid inside the loop.

this approach was chosen (instead of making 'item' a non-reference) to
keep the code more in sync with creator (where the string type is more
complex).

Change-Id: I60a4b0654dc47c0e3466d43904c358eb7e3e64e2
Reviewed-By: Marius Storm-Olsen
Reviewed-on: http://codereview.qt.nokia.com/1702
Reviewed-by: Marius Storm-Olsen <marius.storm-olsen@nokia.com>
qmake/project.cpp

index ff59577..cb4117b 100644 (file)
@@ -2289,7 +2289,7 @@ QMakeProject::doProjectExpand(QString func, QList<QStringList> args_list,
                     ret.prepend(item);
                 foreach (const QString &dep, dependees[item]) {
                     QSet<QString> &dset = dependencies[dep];
-                    dset.remove(item);
+                    dset.remove(rootSet.at(i)); // *Don't* use 'item' - rootSet may have changed!
                     if (dset.isEmpty())
                         rootSet << dep;
                 }