From eba9769b7e794cf1df204d8365a84e7f70c5a510 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 14 Jan 2014 14:21:10 +0100 Subject: [PATCH] QmakeParser: Do not leak temporaries into cache of files This prevents an access to free'd memory when opening qtcreator.pro. Looks like qml2puppet.pro gets added to that cache in QMakeVfs::writeFile with part of the including pro-file's filename in it. That part gets cleaned when that containing ProFile goes out of scope, leaving a key in QMakeVfs::m_files free'd but accessible. Change-Id: I80b43d2fbb66c214647497ea97e6e3a587e274d6 Reviewed-by: Oswald Buddenhagen (cherry picked from qtcreator/336c3159617cdb3edd35021b5fb312d4d43f9a84) Reviewed-by: Joerg Bornemann --- qmake/library/qmakebuiltins.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/qmake/library/qmakebuiltins.cpp b/qmake/library/qmakebuiltins.cpp index 51ba6dc0a0e..43989370158 100644 --- a/qmake/library/qmakebuiltins.cpp +++ b/qmake/library/qmakebuiltins.cpp @@ -1556,7 +1556,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBuiltinConditional( if (!args.at(2).toQString(m_tmp1).compare(fL1S("append"), Qt::CaseInsensitive)) mode = QIODevice::Append; } - return writeFile(QString(), resolvePath(args.at(0).toQString(m_tmp1)), mode, contents); + QString path = resolvePath(args.at(0).toQString(m_tmp1)); + path.detach(); // make sure to not leak m_tmp1 into the map of written files. + return writeFile(QString(), path, mode, contents); } case T_TOUCH: { if (args.count() != 2) {