diff options
author | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2017-08-14 12:06:35 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@qt.io> | 2018-06-27 17:24:09 +0000 |
commit | d550ba4e9628cf67880a1c8596629ec598718b3e (patch) | |
tree | e5f12958a8aab6bcc4bef7cd701aa354098cc716 /qmake/library/qmakeevaluator.cpp | |
parent | d68016c739f5e406fcd43f8fcfc94cc6fb76dded (diff) |
qmake: make access to raw data temporaries safe
make sure the access is properly scoped and does not recurse.
Change-Id: Iaa345cd2771811281b9ed6f634c70235a78c3c33
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
Diffstat (limited to 'qmake/library/qmakeevaluator.cpp')
-rw-r--r-- | qmake/library/qmakeevaluator.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/qmake/library/qmakeevaluator.cpp b/qmake/library/qmakeevaluator.cpp index 8f48ebc546..ea2233f201 100644 --- a/qmake/library/qmakeevaluator.cpp +++ b/qmake/library/qmakeevaluator.cpp @@ -337,7 +337,8 @@ static void replaceInList(ProStringList *varlist, const QRegExp ®exp, const QString &replace, bool global, QString &tmp) { for (ProStringList::Iterator varit = varlist->begin(); varit != varlist->end(); ) { - QString val = varit->toQString(tmp); + ProStringRoUser u1(*varit, tmp); + QString val = u1.str(); QString copy = val; // Force detach and have a reference value val.replace(regexp, replace); if (!val.isSharedWith(copy) && val != copy) { @@ -1336,7 +1337,8 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateConfigFeatures() bool finished = true; ProStringList configs = values(statics.strCONFIG); for (int i = configs.size() - 1; i >= 0; --i) { - QString config = configs.at(i).toQString(m_tmp1).toLower(); + ProStringRoUser u1(configs.at(i), m_tmp1); + QString config = u1.str().toLower(); if (!processed.contains(config)) { config.detach(); processed.insert(config); @@ -1640,7 +1642,8 @@ bool QMakeEvaluator::isActiveConfig(const QStringRef &config, bool regex) // CONFIG variable const auto configValues = values(statics.strCONFIG); for (const ProString &configValue : configValues) { - if (re.exactMatch(configValue.toQString(m_tmp[m_toggle ^= 1]))) + ProStringRoUser u1(configValue, m_tmp[m_toggle ^= 1]); + if (re.exactMatch(u1.str())) return true; } } else { @@ -1749,9 +1752,9 @@ QMakeEvaluator::VisitReturn QMakeEvaluator::evaluateBoolFunction( if (val) return ReturnTrue; } else { + ProStringRoUser u1(function, m_tmp1); evalError(fL1S("Unexpected return value from test '%1': %2.") - .arg(function.toQString(m_tmp1)) - .arg(ret.join(QLatin1String(" :: ")))); + .arg(u1.str(), ret.join(QLatin1String(" :: ")))); } } return ReturnFalse; |