commit 7e60d11c1b046e54378cf79280f4a856741c8749 Author: Tobias Stoeckmann Date: Sat Aug 22 14:09:58 2020 +0200 Close iconv in case of allocation error If memory allocation in strdup_locale_from_utf8 fails after calling iconv_open, the returned conversion descriptor is not closed. diff --git a/src/poptint.c b/src/poptint.c index 0cec176..3a0919a 100644 --- a/src/poptint.c +++ b/src/poptint.c @@ -91,8 +91,10 @@ strdup_locale_from_utf8 (char * istr) size_t ob = db; size_t err; - if (dstr == NULL) + if (dstr == NULL) { + (void) iconv_close(cd); return NULL; + } err = iconv(cd, NULL, NULL, NULL, NULL); while (1) { *pout = '\0'; commit 70011cc5763dca9a9b57e9539b465e00c9769996 Author: Michal Domonkos Date: Mon Jul 19 14:41:03 2021 +0200 Fix potential mem leak in poptReadConfigFile() While it seems that the actual implementation of poptReadFile() shouldn't allocate the passed buffer (b) if the number of bytes (nb) is zero (see the read(2) call in that function), it's still up to the caller to take care of this resource, so let's just do that by bailing out via "exit" where the freeing happens. Also initialize t to NULL to avoid freeing an undefined pointer. Found by Coverity. diff --git a/src/poptconfig.c b/src/poptconfig.c index 8623ba2..7c52315 100644 --- a/src/poptconfig.c +++ b/src/poptconfig.c @@ -344,13 +344,15 @@ int poptReadConfigFile(poptContext con, const char * fn) char * b = NULL, *be; size_t nb = 0; const char *se; - char *t, *te; + char *t = NULL, *te; int rc; if ((rc = poptReadFile(fn, &b, &nb, POPT_READFILE_TRIMNEWLINES)) != 0) return (errno == ENOENT ? 0 : rc); - if (b == NULL || nb == 0) - return POPT_ERROR_BADCONFIG; + if (b == NULL || nb == 0) { + rc = POPT_ERROR_BADCONFIG; + goto exit; + } if ((t = malloc(nb + 1)) == NULL) goto exit;