diff options
author | Ted Kremenek <kremenek@apple.com> | 2010-01-15 07:56:51 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2010-01-15 07:56:51 +0000 |
commit | c213b48206c55ca0eb1387cfa1651de504f147d1 (patch) | |
tree | d6b5d000580cb5a8c854cb2b6936a2cb8a37b1e5 /lib/Analysis/BugReporter.cpp | |
parent | 8b9317186fd5243938128a0b0e0494498d78ab8c (diff) |
Teach BugReporter to "escape" the occurance of '%' characters in diagnostic messages when emitted results to the standard Diagnostics output. Fixes PR 6033.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@93507 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Analysis/BugReporter.cpp')
-rw-r--r-- | lib/Analysis/BugReporter.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/Analysis/BugReporter.cpp b/lib/Analysis/BugReporter.cpp index 13b7f4510d..2a9531df60 100644 --- a/lib/Analysis/BugReporter.cpp +++ b/lib/Analysis/BugReporter.cpp @@ -1818,8 +1818,23 @@ void BugReporter::FlushReport(BugReportEquivClass& EQ) { R->getRanges(Beg, End); Diagnostic& Diag = getDiagnostic(); FullSourceLoc L(R->getLocation(), getSourceManager()); - unsigned ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning, - R->getShortDescription()); + + // Search the description for '%', as that will be interpretted as a + // format character by FormatDiagnostics. + llvm::StringRef desc = R->getShortDescription(); + unsigned ErrorDiag; + { + llvm::SmallString<512> TmpStr; + llvm::raw_svector_ostream Out(TmpStr); + for (llvm::StringRef::iterator I=desc.begin(), E=desc.end(); I!=E; ++I) + if (*I == '%') + Out << "%%"; + else + Out << *I; + + Out.flush(); + ErrorDiag = Diag.getCustomDiagID(Diagnostic::Warning, TmpStr); + } switch (End-Beg) { default: assert(0 && "Don't handle this many ranges yet!"); |