Fix a trivial use after free.
authorRafael Espindola <rafael.espindola@gmail.com>
Sat, 24 Jul 2010 23:02:11 +0000 (23:02 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Sat, 24 Jul 2010 23:02:11 +0000 (23:02 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109363 91177308-0d34-0410-b5e6-96231b3b80d8

tools/bugpoint/ToolRunner.cpp

index 3149a7a494a99be36bfa6e8aa5730a75b156c4ff..df14aab3dfac1b61e87e342eb2b976c65e048630 100644 (file)
@@ -719,7 +719,11 @@ int GCC::ExecuteProgram(const std::string &ProgramFile,
     return -1;
   }
 
-  std::vector<const char*> ProgramArgs;
+  std::vector<const char *> ProgramArgs;
+
+  // Declared here so that the destructor only runs after
+  // ProgramArgs is used.
+  std::string Exec;
 
   if (RemoteClientPath.isEmpty())
     ProgramArgs.push_back(OutputBinary.c_str());
@@ -741,7 +745,7 @@ int GCC::ExecuteProgram(const std::string &ProgramFile,
     // Full path to the binary. We need to cd to the exec directory because
     // there is a dylib there that the exec expects to find in the CWD
     char* env_pwd = getenv("PWD");
-    std::string Exec = "cd ";
+    Exec = "cd ";
     Exec += env_pwd;
     Exec += "; ./";
     Exec += OutputBinary.c_str();