diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-18 17:07:15 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2014-06-18 17:07:15 +0000 |
commit | 24d8b848385e3dbfda4c8d629f40b0a7ea335dc0 (patch) | |
tree | 04f542a08587d4c8e67384d590f9a3602a2dc188 /llvm/lib/Object/ELFObjectFile.cpp | |
parent | 4601093267a8f92ae8f223f3f7f1b6f07d95394d (diff) | |
download | bcm5719-llvm-24d8b848385e3dbfda4c8d629f40b0a7ea335dc0.tar.gz bcm5719-llvm-24d8b848385e3dbfda4c8d629f40b0a7ea335dc0.zip |
Fix a memory leak in the error path.
llvm-svn: 211184
Diffstat (limited to 'llvm/lib/Object/ELFObjectFile.cpp')
-rw-r--r-- | llvm/lib/Object/ELFObjectFile.cpp | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/llvm/lib/Object/ELFObjectFile.cpp b/llvm/lib/Object/ELFObjectFile.cpp index 356288ffc51..0a3e2cb790d 100644 --- a/llvm/lib/Object/ELFObjectFile.cpp +++ b/llvm/lib/Object/ELFObjectFile.cpp @@ -17,8 +17,8 @@ namespace llvm { using namespace object; -ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, - bool BufferOwned) { +static ErrorOr<ObjectFile *> createELFObjectFileAux(MemoryBuffer *Obj, + bool BufferOwned) { std::pair<unsigned char, unsigned char> Ident = getElfArchType(Obj); std::size_t MaxAlignment = 1ULL << countTrailingZeros(uintptr_t(Obj->getBufferStart())); @@ -82,4 +82,12 @@ ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, return R.release(); } +ErrorOr<ObjectFile *> ObjectFile::createELFObjectFile(MemoryBuffer *Obj, + bool BufferOwned) { + ErrorOr<ObjectFile *> Ret = createELFObjectFileAux(Obj, BufferOwned); + if (BufferOwned && Ret.getError()) + delete Obj; + return Ret; +} + } // end namespace llvm |