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 cdaff2f..85fe474 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/lib/Basic/SourceManager.cpp
@@ -947,13 +947,20 @@
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;