summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-12-10 00:30:38 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2011-12-10 00:30:38 +0000
commit6c8d29f7d1576a32d07cd6742087a8648a07f594 (patch)
tree8e38d933e31dc944061e0f9960f4f85c4608eadc /clang/lib/Basic/SourceManager.cpp
parent88d510da9dd6601b827a26a3c015f135953692bf (diff)
downloadbcm5719-llvm-6c8d29f7d1576a32d07cd6742087a8648a07f594.tar.gz
bcm5719-llvm-6c8d29f7d1576a32d07cd6742087a8648a07f594.zip
Add a sanity check in SourceManager::getColumnNumber, make sure
we don't try to access beyond the buffer. llvm-svn: 146305
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r--clang/lib/Basic/SourceManager.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp
index cdaff2f0082..85fe474d664 100644
--- a/clang/lib/Basic/SourceManager.cpp
+++ b/clang/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;
OpenPOWER on IntegriCloud