From: Argyrios Kyrtzidis Date: Sat, 10 Dec 2011 00:30:38 +0000 (+0000) Subject: Add a sanity check in SourceManager::getColumnNumber, make sure X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d575254dcd061ad9e6661598f4443d85a7bd1d8b;p=clang Add a sanity check in SourceManager::getColumnNumber, make sure we don't try to access beyond the buffer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@146305 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index cdaff2f008..85fe474d66 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -947,13 +947,20 @@ const char *SourceManager::getCharacterData(SourceLocation SL, unsigned SourceManager::getColumnNumber(FileID FID, unsigned FilePos, bool *Invalid) const { bool MyInvalid = false; - const char *Buf = getBuffer(FID, &MyInvalid)->getBufferStart(); + const llvm::MemoryBuffer *MemBuf = getBuffer(FID, &MyInvalid); if (Invalid) *Invalid = MyInvalid; if (MyInvalid) return 1; + const char *Buf = MemBuf->getBufferStart(); + if (Buf + FilePos >= MemBuf->getBufferEnd()) { + if (Invalid) + *Invalid = MyInvalid; + return 1; + } + unsigned LineStart = FilePos; while (LineStart && Buf[LineStart-1] != '\n' && Buf[LineStart-1] != '\r') --LineStart;