From 2dd3fd0de417e62bb3cd9b01c4b4f35e372905cf Mon Sep 17 00:00:00 2001 From: Nick Alcock Date: Fri, 26 Apr 2024 18:10:00 +0100 Subject: libctf: ctf_archive_iter: fix tiny leak If iteration fails because opening a dict has failed, ctf_archive_next does not destroy the iterator, so the caller can keep going and try to open other dicts further into the archive. ctf_archive_iter just returns, though, so it should free the iterator rather than leaking it. libctf/ * ctf-archive.c (ctf_archive_iter): Don't leak the iterator on failure. --- libctf/ctf-archive.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'libctf') diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c index 451d6c6..f459c02 100644 --- a/libctf/ctf-archive.c +++ b/libctf/ctf-archive.c @@ -1063,7 +1063,7 @@ ctf_archive_iter (const ctf_archive_t *arc, ctf_archive_member_f *func, ctf_next_t *i = NULL; ctf_dict_t *fp; const char *name; - int err; + int err = 0; while ((fp = ctf_archive_next (arc, &i, &name, 0, &err)) != NULL) { @@ -1077,6 +1077,11 @@ ctf_archive_iter (const ctf_archive_t *arc, ctf_archive_member_f *func, } ctf_dict_close (fp); } + if (err != ECTF_NEXT_END && err != 0) + { + ctf_next_destroy (i); + return -1; + } return 0; } -- cgit v1.1