diff options
author | hjk <hjk121@nokiamail.com> | 2014-11-05 11:47:11 +0100 |
---|---|---|
committer | hjk <hjk121@nokiamail.com> | 2014-11-05 12:30:46 +0100 |
commit | 1c12b30bef32948171ebc2dc4744fb4ecfed7e23 (patch) | |
tree | 73fcb64f318bf95f8cc3d8bad1c47ae1fcaf1353 | |
parent | 2d7af0d732b3ae6d99c4be361d73a594b57f8145 (diff) | |
download | qt-creator-1c12b30bef32948171ebc2dc4744fb4ecfed7e23.tar.gz |
Prevent indefinite recursion in macro expansion
Task-number: QTCREATORBUG-13315
Change-Id: Ibf963569bdebf8a791f0a7ceb8cd010efed99dad
Reviewed-by: Eike Ziller <eike.ziller@theqtcompany.com>
-rw-r--r-- | src/libs/utils/macroexpander.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/libs/utils/macroexpander.cpp b/src/libs/utils/macroexpander.cpp index 3bb42e652d..41cf66bf65 100644 --- a/src/libs/utils/macroexpander.cpp +++ b/src/libs/utils/macroexpander.cpp @@ -29,6 +29,7 @@ ****************************************************************************/ #include "macroexpander.h" +#include "qtcassert.h" #include "qtcprocess.h" #include "algorithm.h" @@ -49,7 +50,7 @@ const char kFileBaseNamePostfix[] = ":FileBaseName"; class MacroExpanderPrivate : public AbstractMacroExpander { public: - MacroExpanderPrivate() : m_accumulating(false) {} + MacroExpanderPrivate() : m_accumulating(false), m_lockDepth(0) {} bool resolveMacro(const QString &name, QString *ret) { @@ -108,6 +109,8 @@ public: QVector<MacroExpanderProvider> m_subProviders; QVector<MacroExpander *> m_subExpanders; // Not owned bool m_accumulating; + + int m_lockDepth; }; } // Internal @@ -261,8 +264,16 @@ QString MacroExpander::value(const QByteArray &variable, bool *found) const */ QString MacroExpander::expand(const QString &stringWithVariables) const { + if (d->m_lockDepth > 3) // Limit recursion. + return QString(); + + ++d->m_lockDepth; + QString res = stringWithVariables; Utils::expandMacros(&res, d); + + --d->m_lockDepth; + return res; } |