From: Alan Modra <amodra@sourceware.org>
To: bfd-cvs@sourceware.org
Subject: [binutils-gdb] bfd_error_on_input messages
Date: Mon, 5 Jun 2023 07:18:26 +0000 (GMT) [thread overview]
Message-ID: <20230605071826.DC0FD385661B@sourceware.org> (raw)
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=fc998e4cb708899b5f75d8d4d2b79ed162437c41
commit fc998e4cb708899b5f75d8d4d2b79ed162437c41
Author: Alan Modra <amodra@gmail.com>
Date: Mon Jun 5 16:25:16 2023 +0930
bfd_error_on_input messages
bfd_errmsg uses asprintf for bfd_error_on_input, which means we
currently leak memory. Keep a static pointer to the message and free
it in various places to minimise the leaks.
bfd_set_input_error (NULL, bfd_error_no_error) is a way to free up the
last string if that matters.
* bfd.c (input_error_msg): New static var.
(bfd_set_input_error): Free it here..
(bfd_init): ..and here..
(bfd_errmsg): ..and here. Use it for asprintf output.
Diff:
---
bfd/bfd.c | 14 ++++++++++----
1 file changed, 10 insertions(+), 4 deletions(-)
diff --git a/bfd/bfd.c b/bfd/bfd.c
index 71debd73733..4ae73701ce1 100644
--- a/bfd/bfd.c
+++ b/bfd/bfd.c
@@ -703,8 +703,9 @@ CODE_FRAGMENT
*/
static bfd_error_type bfd_error;
-static bfd *input_bfd;
static bfd_error_type input_error;
+static bfd *input_bfd;
+static char *input_error_msg;
const char *const bfd_errmsgs[] =
{
@@ -792,6 +793,8 @@ bfd_set_input_error (bfd *input, bfd_error_type error_tag)
/* This is an error that occurred during bfd_close when writing an
archive, but on one of the input files. */
bfd_error = bfd_error_on_input;
+ free (input_error_msg);
+ input_error_msg = NULL;
input_bfd = input;
input_error = error_tag;
if (input_error >= bfd_error_on_input)
@@ -818,12 +821,13 @@ bfd_errmsg (bfd_error_type error_tag)
#endif
if (error_tag == bfd_error_on_input)
{
- char *buf;
const char *msg = bfd_errmsg (input_error);
- if (asprintf (&buf, _(bfd_errmsgs [error_tag]),
+ free (input_error_msg);
+ input_error_msg = NULL;
+ if (asprintf (&input_error_msg, _(bfd_errmsgs [error_tag]),
bfd_get_filename (input_bfd), msg) != -1)
- return buf;
+ return input_error_msg;
/* Ick, what to do on out of memory? */
return msg;
@@ -1659,6 +1663,8 @@ bfd_init (void)
{
bfd_error = bfd_error_no_error;
input_bfd = NULL;
+ free (input_error_msg);
+ input_error_msg = NULL;
input_error = bfd_error_no_error;
_bfd_error_program_name = NULL;
_bfd_error_internal = error_handler_fprintf;
reply other threads:[~2023-06-05 7:18 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230605071826.DC0FD385661B@sourceware.org \
--to=amodra@sourceware.org \
--cc=bfd-cvs@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).