[pr17595] Fix a use after free.

Destroying the codegen also frees the path of the created object. Copy the
path to a std::string.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@192787 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2013-10-16 12:47:04 +00:00
parent d1a4f579bf
commit 648a2e6714

View File

@ -427,9 +427,14 @@ static ld_plugin_status all_symbols_read_hook(void) {
exit(0);
}
}
const char *objPath;
if (lto_codegen_compile_to_file(code_gen, &objPath)) {
(*message)(LDPL_ERROR, "Could not produce a combined object file\n");
std::string ObjPath;
{
const char *Temp;
if (lto_codegen_compile_to_file(code_gen, &Temp)) {
(*message)(LDPL_ERROR, "Could not produce a combined object file\n");
}
ObjPath = Temp;
}
lto_codegen_dispose(code_gen);
@ -441,9 +446,9 @@ static ld_plugin_status all_symbols_read_hook(void) {
}
}
if ((*add_input_file)(objPath) != LDPS_OK) {
if ((*add_input_file)(ObjPath.c_str()) != LDPS_OK) {
(*message)(LDPL_ERROR, "Unable to add .o file to the link.");
(*message)(LDPL_ERROR, "File left behind in: %s", objPath);
(*message)(LDPL_ERROR, "File left behind in: %s", ObjPath.c_str());
return LDPS_ERR;
}
@ -454,7 +459,7 @@ static ld_plugin_status all_symbols_read_hook(void) {
}
if (options::obj_path.empty())
Cleanup.push_back(objPath);
Cleanup.push_back(ObjPath);
return LDPS_OK;
}