From ca26b8030e8c184bdeca7280e31c10c6e9fc3f78 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 22 Mar 2023 08:52:11 +1030 Subject: [PATCH] gas: expand_irp memory leaks * macro.c (expand_irp): Free memory on error return paths. --- gas/macro.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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; -- 2.30.2