forked from OSchip/llvm-project
Workaround a bug exposed by the FileCheckify of message-length.c, the caret end
column computation isn't correct and could exceed the line length, which resulted in a buffer overflow later. - Chris, is there a better way for this code to compute the final column used by the caret? llvm-svn: 84475
This commit is contained in:
parent
b0c23e81e7
commit
28a24fdbbc
|
@ -214,6 +214,7 @@ static void SelectInterestingSourceRegion(std::string &SourceLine,
|
|||
// Move the end of the interesting region right until we've
|
||||
// pulled in something else interesting.
|
||||
if (CaretEnd != SourceLength) {
|
||||
assert(CaretEnd < SourceLength && "Unexpected caret position!");
|
||||
unsigned NewEnd = CaretEnd;
|
||||
|
||||
// Skip over any whitespace we see here; we're looking for
|
||||
|
@ -320,6 +321,11 @@ void TextDiagnosticPrinter::EmitCaretDiagnostic(SourceLocation Loc,
|
|||
while (*LineEnd != '\n' && *LineEnd != '\r' && *LineEnd != '\0')
|
||||
++LineEnd;
|
||||
|
||||
// FIXME: This shouldn't be necessary, but the CaretEndColNo can extend past
|
||||
// the source line length as currently being computed. See
|
||||
// test/Misc/message-length.c.
|
||||
CaretEndColNo = std::min(CaretEndColNo, unsigned(LineEnd - LineStart));
|
||||
|
||||
// Copy the line of code into an std::string for ease of manipulation.
|
||||
std::string SourceLine(LineStart, LineEnd);
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// RUN: clang -fsyntax-only -fmessage-length=72 %s 2>&1 | tee /tmp/out.txt | FileCheck -strict-whitespace %s &&
|
||||
// RUN: clang -fsyntax-only -fmessage-length=72 %s 2>&1 | FileCheck -strict-whitespace %s &&
|
||||
// RUN: clang -fsyntax-only -fmessage-length=1 %s
|
||||
|
||||
// Hack so we can check things better, force the file name and line.
|
||||
|
@ -29,4 +29,4 @@ void a_very_long_line(int *ip, float *FloatPointer) {
|
|||
|
||||
|
||||
// CHECK: FILE:23:78
|
||||
// CHECK: {{^ ...some long comment text and a brace, eh {} $}}
|
||||
// CHECK: {{^ ...// some long comment text and a brace, eh {} $}}
|
||||
|
|
Loading…
Reference in New Issue