From 8fd05e6289a3190a9e1e5056ecff2a0e02aac2c2 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Wed, 18 Nov 2015 14:29:19 +0100 Subject: Don't ignore first character after a string. The parser in QMakeSourceFileInfo::findDeps() would step over the closing quote of a string, only to have a for loop then step over the character just after that closing quote, which was thus never studied; this could lead to problems in various ways. Fixed that and expanded findDeps() test to catch regressions. Task-number: QTBUG-17533 Change-Id: I7dec5222e38fa188495b39376ffee70bc7bbc87f Reviewed-by: Oswald Buddenhagen --- qmake/generators/makefiledeps.cpp | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) (limited to 'qmake/generators/makefiledeps.cpp') diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index b939a9c9d4..43f368f0be 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -584,17 +584,14 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file) // buffer[x] is '"' } else { const char term = buffer[x]; - while (++x < buffer_len) { - if (buffer[x] == term) { + while (++x < buffer_len && buffer[x] != term) { + if (buffer[x] == '\\') ++x; - break; - } else if (buffer[x] == '\\') { - ++x; - } else if (qmake_endOfLine(buffer[x])) { + else if (qmake_endOfLine(buffer[x])) ++line_count; - } } } + // for loop's ++x shall step over the closing quote. } beginning = 0; } -- cgit v1.2.3