From 7b9ef7923f9a8d33f118e703695b4e23d57c1c4c Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Mon, 30 May 2011 14:25:14 +0200
Subject: [PATCH] fix read beyond eol on missing expansion terminator

now we uniformly increment the read pointer only if we encountered a
terminator (which also implies that we were not at non-eol yet).

Task-number: QTCREATORBUG-5022
Change-Id: If4a4e7aec7423684297393fa10e50a69773b2048
Reviewed-on: http://codereview.qt.nokia.com/222
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
---
 src/shared/proparser/profileparser.cpp | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/src/shared/proparser/profileparser.cpp b/src/shared/proparser/profileparser.cpp
index 0050940079d..8d923c18d74 100644
--- a/src/shared/proparser/profileparser.cpp
+++ b/src/shared/proparser/profileparser.cpp
@@ -515,7 +515,6 @@ bool ProFileParser::read(ProFile *pro, const QString &in)
                             goto newWord;
                         }
                         if (term) {
-                            cur++;
                           checkTerm:
                             if (c != term) {
                                 parseError(fL1S("Missing %1 terminator [found %2]")
@@ -523,9 +522,9 @@ bool ProFileParser::read(ProFile *pro, const QString &in)
                                     .arg(c ? QString(c) : QString::fromLatin1("end-of-line")));
                                 pro->setOk(false);
                                 m_inError = true;
-                                if (c)
-                                    cur--;
                                 // Just parse on, as if there was a terminator ...
+                            } else {
+                                cur++;
                             }
                         }
                       joinToken:
@@ -585,7 +584,7 @@ bool ProFileParser::read(ProFile *pro, const QString &in)
                                 finalizeCall(tokPtr, buf, ptr, theargc);
                                 goto nextItem;
                             } else if (term == '}') {
-                                c = (cur == end) ? 0 : *cur++;
+                                c = (cur == end) ? 0 : *cur;
                                 goto checkTerm;
                             } else {
                                 Q_ASSERT(!term);
-- 
GitLab