diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2009-02-13 07:54:34 +0000 | 
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2009-02-13 07:54:34 +0000 | 
| commit | 333db7abbd51dfd8c56bcbe3febe0abef0c31d0d (patch) | |
| tree | 3d9211316bc824224cac72367ad0213f8c6633c6 /llvm | |
| parent | cdccffe731a8a10aade46d30df31aa478bdd9325 (diff) | |
| download | bcm5719-llvm-333db7abbd51dfd8c56bcbe3febe0abef0c31d0d.tar.gz bcm5719-llvm-333db7abbd51dfd8c56bcbe3febe0abef0c31d0d.zip  | |
If new[] fails, return 0 rather then trying to dereference a null pointer.
llvm-svn: 64444
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Support/MemoryBuffer.cpp | 15 | 
1 files changed, 12 insertions, 3 deletions
diff --git a/llvm/lib/Support/MemoryBuffer.cpp b/llvm/lib/Support/MemoryBuffer.cpp index 83f149423c5..0e60eab301e 100644 --- a/llvm/lib/Support/MemoryBuffer.cpp +++ b/llvm/lib/Support/MemoryBuffer.cpp @@ -109,6 +109,7 @@ MemoryBuffer *MemoryBuffer::getMemBufferCopy(const char *StartPtr,  MemoryBuffer *MemoryBuffer::getNewUninitMemBuffer(size_t Size,                                                    const char *BufferName) {    char *Buf = new char[Size+1]; +  if (!Buf) return 0;    Buf[Size] = 0;    MemoryBufferMem *SB = new MemoryBufferMem(Buf, Buf+Size, BufferName);    // The memory for this buffer is owned by the MemoryBuffer. @@ -123,6 +124,7 @@ MemoryBuffer *MemoryBuffer::getNewUninitMemBuffer(size_t Size,  MemoryBuffer *MemoryBuffer::getNewMemBuffer(size_t Size,                                              const char *BufferName) {    MemoryBuffer *SB = getNewUninitMemBuffer(Size, BufferName); +  if (!SB) return 0;    memset(const_cast<char*>(SB->getBufferStart()), 0, Size+1);    return SB;  } @@ -209,9 +211,16 @@ MemoryBuffer *MemoryBuffer::getFile(const char *Filename, std::string *ErrStr,        return new MemoryBufferMMapFile(Filename, Pages, FileSize);      }    } -   -  OwningPtr<MemoryBuffer> SB; -  SB.reset(MemoryBuffer::getNewUninitMemBuffer(FileSize, Filename)); + +  MemoryBuffer *Buf = MemoryBuffer::getNewUninitMemBuffer(FileSize, Filename); +  if (!Buf) { +    // Failed to create a buffer. +    if (ErrStr) *ErrStr = "could not allocate buffer"; +    ::close(FD); +    return 0; +  } + +  OwningPtr<MemoryBuffer> SB(Buf);    char *BufPtr = const_cast<char*>(SB->getBufferStart());    size_t BytesLeft = FileSize;  | 

