diff options
author | Tobias Hunger <tobias.hunger@digia.com> | 2014-01-14 14:21:10 +0100 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@digia.com> | 2014-01-17 15:14:24 +0100 |
commit | 336c3159617cdb3edd35021b5fb312d4d43f9a84 (patch) | |
tree | 14a53274e53f575256db82e6a66894bc4202b3fd /src/shared | |
parent | 2363ea6df91d7a40e1dce72c7fe53a8486ebf1b0 (diff) | |
download | qt-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.cpp | 4 |
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) { |