]> granicus.if.org Git - clang/commitdiff
fix display of source lines with null characters
authorSeth Cantrell <seth.cantrell@gmail.com>
Wed, 18 Apr 2012 02:44:48 +0000 (02:44 +0000)
committerSeth Cantrell <seth.cantrell@gmail.com>
Wed, 18 Apr 2012 02:44:48 +0000 (02:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154981 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/TextDiagnostic.cpp
test/Misc/wnull-character.cpp [new file with mode: 0644]

index 3c35ab24f2ff3f5a88424abd1b5e6c9619da0c87..66362381dfc12fdbab2886f6f7b4dc400d85eca6 100644 (file)
@@ -839,10 +839,13 @@ void TextDiagnostic::emitSnippetAndCaret(
 
   // Get information about the buffer it points into.
   bool Invalid = false;
-  const char *BufStart = SM.getBufferData(FID, &Invalid).data();
+  StringRef BufData = SM.getBufferData(FID, &Invalid);
   if (Invalid)
     return;
 
+  const char *BufStart = BufData.data();
+  const char *BufEnd = BufStart + BufData.size();
+
   unsigned LineNo = SM.getLineNumber(FID, FileOffset);
   unsigned ColNo = SM.getColumnNumber(FID, FileOffset);
   unsigned CaretEndColNo
@@ -856,7 +859,7 @@ void TextDiagnostic::emitSnippetAndCaret(
   // Compute the line end.  Scan forward from the error position to the end of
   // the line.
   const char *LineEnd = TokPtr;
-  while (*LineEnd != '\n' && *LineEnd != '\r' && *LineEnd != '\0')
+  while (*LineEnd != '\n' && *LineEnd != '\r' && LineEnd!=BufEnd)
     ++LineEnd;
 
   // FIXME: This shouldn't be necessary, but the CaretEndColNo can extend past
diff --git a/test/Misc/wnull-character.cpp b/test/Misc/wnull-character.cpp
new file mode 100644 (file)
index 0000000..a618da2
Binary files /dev/null and b/test/Misc/wnull-character.cpp differ