From: Nick Alcock Date: Fri, 25 Apr 2025 20:08:51 +0000 (+0100) Subject: libctf: archive: fix ctf_dict_open_cached error handling X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=88f2c13d1ce8e9ceac2b95a515c6d7ed96b87adb;p=thirdparty%2Fbinutils-gdb.git libctf: archive: fix ctf_dict_open_cached error handling We were misreporting a failure to ctf_dict_open the dict as an out-of-memory error. --- diff --git a/libctf/ctf-archive.c b/libctf/ctf-archive.c index e3c7a5f55a9..06363e7e200 100644 --- a/libctf/ctf-archive.c +++ b/libctf/ctf-archive.c @@ -717,7 +717,7 @@ static ctf_dict_t * ctf_dict_open_cached (ctf_archive_t *arc, const char *name, int *errp) { ctf_dict_t *fp; - char *dupname; + char *dupname = NULL; /* Just return from the cache if possible. */ if (arc->ctfi_dicts @@ -728,10 +728,10 @@ ctf_dict_open_cached (ctf_archive_t *arc, const char *name, int *errp) } /* Not yet cached: open it. */ - fp = ctf_dict_open (arc, name, errp); - dupname = strdup (name); + if ((fp = ctf_dict_open (arc, name, errp)) == NULL) + goto err; - if (!fp || !dupname) + if ((dupname = strdup (name)) == NULL) goto oom; if (arc->ctfi_dicts == NULL) @@ -762,10 +762,11 @@ ctf_dict_open_cached (ctf_archive_t *arc, const char *name, int *errp) return fp; oom: - ctf_dict_close (fp); - free (dupname); if (errp) *errp = ENOMEM; + err: + ctf_dict_close (fp); + free (dupname); return NULL; }