mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-19 00:59:15 +08:00
Fix objcopy and strip so that they remove their temporary files even if an error occurs.
PR binutils/17552 * (copy_archive): Clean up temporary files even if an error occurs.
This commit is contained in:
@ -1,3 +1,9 @@
|
|||||||
|
2014-11-10 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR binutils/17552
|
||||||
|
* (copy_archive): Clean up temporary files even if an error
|
||||||
|
occurs.
|
||||||
|
|
||||||
2014-11-07 H.J. Lu <hongjiu.lu@intel.com>
|
2014-11-07 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* readelf.c (process_dynamic_section): Cast time value to unsigned
|
* readelf.c (process_dynamic_section): Cast time value to unsigned
|
||||||
|
@ -2298,8 +2298,12 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|||||||
/* PR binutils/17533: Do not allow directory traversal
|
/* PR binutils/17533: Do not allow directory traversal
|
||||||
outside of the current directory tree by archive members. */
|
outside of the current directory tree by archive members. */
|
||||||
if (! is_valid_archive_path (bfd_get_filename (this_element)))
|
if (! is_valid_archive_path (bfd_get_filename (this_element)))
|
||||||
fatal (_("illegal pathname found in archive member: %s"),
|
{
|
||||||
bfd_get_filename (this_element));
|
non_fatal (_("illegal pathname found in archive member: %s"),
|
||||||
|
bfd_get_filename (this_element));
|
||||||
|
status = 1;
|
||||||
|
goto cleanup_and_exit;
|
||||||
|
}
|
||||||
|
|
||||||
/* Create an output file for this member. */
|
/* Create an output file for this member. */
|
||||||
output_name = concat (dir, "/",
|
output_name = concat (dir, "/",
|
||||||
@ -2310,8 +2314,12 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|||||||
{
|
{
|
||||||
output_name = make_tempdir (output_name);
|
output_name = make_tempdir (output_name);
|
||||||
if (output_name == NULL)
|
if (output_name == NULL)
|
||||||
fatal (_("cannot create tempdir for archive copying (error: %s)"),
|
{
|
||||||
strerror (errno));
|
non_fatal (_("cannot create tempdir for archive copying (error: %s)"),
|
||||||
|
strerror (errno));
|
||||||
|
status = 1;
|
||||||
|
goto cleanup_and_exit;
|
||||||
|
}
|
||||||
|
|
||||||
l = (struct name_list *) xmalloc (sizeof (struct name_list));
|
l = (struct name_list *) xmalloc (sizeof (struct name_list));
|
||||||
l->name = output_name;
|
l->name = output_name;
|
||||||
@ -2353,7 +2361,7 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|||||||
{
|
{
|
||||||
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
|
bfd_nonfatal_message (output_name, NULL, NULL, NULL);
|
||||||
status = 1;
|
status = 1;
|
||||||
return;
|
goto cleanup_and_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok_object)
|
if (ok_object)
|
||||||
@ -2414,7 +2422,6 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|||||||
{
|
{
|
||||||
status = 1;
|
status = 1;
|
||||||
bfd_nonfatal_message (filename, NULL, NULL, NULL);
|
bfd_nonfatal_message (filename, NULL, NULL, NULL);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
filename = bfd_get_filename (ibfd);
|
filename = bfd_get_filename (ibfd);
|
||||||
@ -2422,9 +2429,9 @@ copy_archive (bfd *ibfd, bfd *obfd, const char *output_target,
|
|||||||
{
|
{
|
||||||
status = 1;
|
status = 1;
|
||||||
bfd_nonfatal_message (filename, NULL, NULL, NULL);
|
bfd_nonfatal_message (filename, NULL, NULL, NULL);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cleanup_and_exit:
|
||||||
/* Delete all the files that we opened. */
|
/* Delete all the files that we opened. */
|
||||||
for (l = list; l != NULL; l = l->next)
|
for (l = list; l != NULL; l = l->next)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user