From: Alan Modra Date: Tue, 21 Mar 2023 22:22:11 +0000 (+1030) Subject: gas: expand_irp memory leaks X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ca26b8030e8c184bdeca7280e31c10c6e9fc3f78;p=binutils-gdb.git gas: expand_irp memory leaks * macro.c (expand_irp): Free memory on error return paths. --- diff --git a/gas/macro.c b/gas/macro.c index 948d76d5bac..c5959f674dd 100644 --- a/gas/macro.c +++ b/gas/macro.c @@ -1320,7 +1320,10 @@ expand_irp (int irpc, size_t idx, sb *in, sb *out, size_t (*get_line) (sb *)) sb_new (&sub); if (! buffer_and_nest (NULL, "ENDR", &sub, get_line)) - return _("unexpected end of file in irp or irpc"); + { + err = _("unexpected end of file in irp or irpc"); + goto out2; + } sb_new (&f.name); sb_new (&f.def); @@ -1328,7 +1331,10 @@ expand_irp (int irpc, size_t idx, sb *in, sb *out, size_t (*get_line) (sb *)) idx = get_token (idx, in, &f.name); if (f.name.len == 0) - return _("missing model parameter"); + { + err = _("missing model parameter"); + goto out1; + } h = str_htab_create (); @@ -1392,9 +1398,11 @@ expand_irp (int irpc, size_t idx, sb *in, sb *out, size_t (*get_line) (sb *)) } htab_delete (h); + out1: sb_kill (&f.actual); sb_kill (&f.def); sb_kill (&f.name); + out2: sb_kill (&sub); return err;