diff options
author | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-09-05 22:07:39 +0200 |
---|---|---|
committer | Oswald Buddenhagen <oswald.buddenhagen@nokia.com> | 2012-09-06 11:55:58 +0200 |
commit | 889f16c345f89fdbaa25a083e57615ef103c3b74 (patch) | |
tree | 2a32c14a324ffc7bf58ce2e6640a368a70f2c052 /src/shared | |
parent | 99cfa88b90e0fb911689a6541d17a3e2326816a6 (diff) | |
download | qt-creator-889f16c345f89fdbaa25a083e57615ef103c3b74.tar.gz |
fix crash when modifiying some project files with scopes
TokBranch may hold zero-sized blocks, which must be explicitly handled
before trying to enter them.
Task-number: QTCREATORBUG-7706
Change-Id: Idaa129e12eb89cbc9572277083765fa6e15e0849
Reviewed-by: Daniel Teske <daniel.teske@nokia.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Diffstat (limited to 'src/shared')
-rw-r--r-- | src/shared/proparser/prowriter.cpp | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/shared/proparser/prowriter.cpp b/src/shared/proparser/prowriter.cpp index 6a6b6f0678..e70740efd9 100644 --- a/src/shared/proparser/prowriter.cpp +++ b/src/shared/proparser/prowriter.cpp @@ -325,11 +325,15 @@ static void findProVariables(const ushort *tokPtr, const QStringList &vars, while (ushort tok = *tokPtr++) { if (tok == TokBranch) { uint blockLen = getBlockLen(tokPtr); - findProVariables(tokPtr, vars, proVars, lineNo); - tokPtr += blockLen; + if (blockLen) { + findProVariables(tokPtr, vars, proVars, lineNo); + tokPtr += blockLen; + } blockLen = getBlockLen(tokPtr); - findProVariables(tokPtr, vars, proVars, lineNo); - tokPtr += blockLen; + if (blockLen) { + findProVariables(tokPtr, vars, proVars, lineNo); + tokPtr += blockLen; + } } else if (tok == TokAssign || tok == TokAppend || tok == TokAppendUnique) { if (getLiteral(lastXpr, tokPtr - 1, tmp) && vars.contains(tmp)) *proVars << lineNo; |