Fix a memory leak in the error path.
authorRafael Espindola <rafael.espindola@gmail.com>
Wed, 18 Jun 2014 17:07:15 +0000 (17:07 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Wed, 18 Jun 2014 17:07:15 +0000 (17:07 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211184 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/ELFObjectFile.cpp

index 356288ffc51ba461639fc50bf593be9693acdf83..0a3e2cb790d0c02d00e99281d9876b3119bcf0cb 100644 (file)
@@ -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