mirror of
https://gcc.gnu.org/git/gcc.git
synced 2024-11-27 05:44:15 +08:00
* xcoff.c: Don't leak a file descriptor if an archive is malformed.
From-SVN: r250684
This commit is contained in:
parent
9761988fc7
commit
afce7debdc
@ -1,3 +1,7 @@
|
||||
2017-07-28 Tony Reix <tony.reix@atos.net>
|
||||
|
||||
* xcoff.c: Don't leak a file descriptor if an archive is malformed.
|
||||
|
||||
2017-07-28 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* fileline.c (fileline_initialize): Print pid_t as long.
|
||||
|
@ -1288,20 +1288,20 @@ xcoff_armem_add (struct backtrace_state *state, int descriptor,
|
||||
|
||||
if (!backtrace_get_view (state, descriptor, 0, sizeof (b_ar_fl_hdr),
|
||||
error_callback, data, &view))
|
||||
return 0;
|
||||
goto fail;
|
||||
|
||||
memcpy (&fl_hdr, view.data, sizeof (b_ar_fl_hdr));
|
||||
|
||||
backtrace_release_view (state, &view, error_callback, data);
|
||||
|
||||
if (memcmp (fl_hdr.fl_magic, AIAMAGBIG, 8) != 0)
|
||||
return 0;
|
||||
goto fail;
|
||||
|
||||
memlen = strlen (member);
|
||||
|
||||
/* Read offset of first archive member. */
|
||||
if (!xcoff_parse_decimal (fl_hdr.fl_fstmoff, sizeof fl_hdr.fl_fstmoff, &off))
|
||||
return 0;
|
||||
goto fail;
|
||||
while (off != 0)
|
||||
{
|
||||
/* Map archive member header and member name. */
|
||||
@ -1309,7 +1309,7 @@ xcoff_armem_add (struct backtrace_state *state, int descriptor,
|
||||
if (!backtrace_get_view (state, descriptor, off,
|
||||
sizeof (b_ar_hdr) + memlen,
|
||||
error_callback, data, &view))
|
||||
return 0;
|
||||
break;
|
||||
|
||||
ar_hdr = (const b_ar_hdr *) view.data;
|
||||
|
||||
@ -1345,6 +1345,7 @@ xcoff_armem_add (struct backtrace_state *state, int descriptor,
|
||||
backtrace_release_view (state, &view, error_callback, data);
|
||||
}
|
||||
|
||||
fail:
|
||||
/* No matching member found. */
|
||||
backtrace_close (descriptor, error_callback, data);
|
||||
return 0;
|
||||
|
Loading…
Reference in New Issue
Block a user