summaryrefslogtreecommitdiff
path: root/src/shared
diff options
context:
space:
mode:
authorTobias Hunger <tobias.hunger@digia.com>2014-01-14 14:21:10 +0100
committerOswald Buddenhagen <oswald.buddenhagen@digia.com>2014-01-17 15:14:24 +0100
commit336c3159617cdb3edd35021b5fb312d4d43f9a84 (patch)
tree14a53274e53f575256db82e6a66894bc4202b3fd /src/shared
parent2363ea6df91d7a40e1dce72c7fe53a8486ebf1b0 (diff)
downloadqt-creator-336c3159617cdb3edd35021b5fb312d4d43f9a84.tar.gz
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 <oswald.buddenhagen@digia.com>
Diffstat (limited to 'src/shared')
-rw-r--r--src/shared/proparser/qmakebuiltins.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/src/shared/proparser/qmakebuiltins.cpp b/src/shared/proparser/qmakebuiltins.cpp
index 3b881b4485..0cf81ce30c 100644
--- a/src/shared/proparser/qmakebuiltins.cpp
+++ b/src/shared/proparser/qmakebuiltins.cpp
@@ -1531,7 +1531,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) {