Forming an out of bounds pointer to check if it's out
of bounds was undefined behavior.
From 6ad9365bf9f3d6a951ee8bc46742aff8fc5bef10 Mon Sep 17 00:00:00 2001
From: nobled <[email protected]>
Date: Thu, 15 Dec 2011 17:49:49 +0000
Subject: [PATCH 02/19] SourceManager: use getBufferSize()

Forming an out of bounds pointer to check if it's out
of bounds was undefined behavior.
---
 lib/Basic/SourceManager.cpp |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp
index 5221ed4..310b68e 100644
--- a/lib/Basic/SourceManager.cpp
+++ b/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);
 
-- 
1.7.4.1

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to