diff options
author | Dylan Noblesmith <nobled@dreamwidth.org> | 2011-12-19 08:51:05 +0000 |
---|---|---|
committer | Dylan Noblesmith <nobled@dreamwidth.org> | 2011-12-19 08:51:05 +0000 |
commit | 2a8bc15230a128c8492cf0e0abbbb6b5e914c89c (patch) | |
tree | d871385e1c70481b402edfc10631bc77ec9331f0 /clang | |
parent | ac2bda8dd0a2bd5fcdf9a702ec546f6c315b0229 (diff) | |
download | bcm5719-llvm-2a8bc15230a128c8492cf0e0abbbb6b5e914c89c.tar.gz bcm5719-llvm-2a8bc15230a128c8492cf0e0abbbb6b5e914c89c.zip |
SourceManager: use getBufferSize()
Forming an out of bounds pointer to check if it's out
of bounds was undefined behavior.
llvm-svn: 146861
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index 5221ed49aa3..310b68eaeb5 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -962,13 +962,13 @@ unsigned SourceManager::getColumnNumber(FileID FID, unsigned FilePos, if (MyInvalid) return 1; - const char *Buf = MemBuf->getBufferStart(); - if (Buf + FilePos >= MemBuf->getBufferEnd()) { + if (FilePos >= MemBuf->getBufferSize()) { if (Invalid) *Invalid = MyInvalid; return 1; } + const char *Buf = MemBuf->getBufferStart(); unsigned LineStart = FilePos; while (LineStart && Buf[LineStart-1] != '\n' && Buf[LineStart-1] != '\r') --LineStart; @@ -1524,9 +1524,10 @@ SourceLocation SourceManager::translateLineCol(FileID FID, return FileLoc.getLocWithOffset(Size); } + const llvm::MemoryBuffer *Buffer = Content->getBuffer(Diag, *this); unsigned FilePos = Content->SourceLineCache[Line - 1]; - const char *Buf = Content->getBuffer(Diag, *this)->getBufferStart() + FilePos; - unsigned BufLength = Content->getBuffer(Diag, *this)->getBufferEnd() - Buf; + const char *Buf = Buffer->getBufferStart() + FilePos; + unsigned BufLength = Buffer->getBufferSize() - FilePos; if (BufLength == 0) return FileLoc.getLocWithOffset(FilePos); |