Lex: Don't crash if both conflict markers are on the same line

We would check if the terminator marker is on a newline.  However, the
logic would end up out-of-bounds if the terminator marker immediately
follows the start marker.

This fixes PR21820.

llvm-svn: 224210
This commit is contained in:
David Majnemer 2014-12-14 04:53:11 +00:00
parent 11c4874d83
commit 5a54977ea8
2 changed files with 4 additions and 2 deletions

View File

@ -2588,8 +2588,8 @@ static const char *FindConflictEnd(const char *CurPtr, const char *BufferEnd,
size_t Pos = RestOfBuffer.find(Terminator);
while (Pos != StringRef::npos) {
// Must occur at start of line.
if (RestOfBuffer[Pos-1] != '\r' &&
RestOfBuffer[Pos-1] != '\n') {
if (Pos == 0 ||
(RestOfBuffer[Pos - 1] != '\r' && RestOfBuffer[Pos - 1] != '\n')) {
RestOfBuffer = RestOfBuffer.substr(Pos+TermLen);
Pos = RestOfBuffer.find(Terminator);
continue;

View File

@ -36,3 +36,5 @@ int foo() {
y a = x;
return x + a - z;
}
<<<<<<<>>>>>>> // expected-error {{expected identifier}}