diff options
author | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2021-08-03 21:10:20 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2021-08-03 21:10:20 +0530 |
commit | 5f9b78fe35d08739b6da1e5b356786d41116c108 (patch) | |
tree | be653c9dc3792a36edc052736a55b7fc71ee6274 | |
parent | b0234d79e7d82475d1666f25326ec045c045b3ed (diff) | |
download | glibc-5f9b78fe35d08739b6da1e5b356786d41116c108.zip glibc-5f9b78fe35d08739b6da1e5b356786d41116c108.tar.gz glibc-5f9b78fe35d08739b6da1e5b356786d41116c108.tar.bz2 |
gconv_parseconfdir: Fix memory leak
The allocated `conf` would leak if we have to skip over the file due
to the underlying filesystem not supporting dt_type.
Reviewed-by: Arjun Shankar <arjun@redhat.com>
-rw-r--r-- | iconv/gconv_parseconfdir.h | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/iconv/gconv_parseconfdir.h b/iconv/gconv_parseconfdir.h index a4153e5..2f06268 100644 --- a/iconv/gconv_parseconfdir.h +++ b/iconv/gconv_parseconfdir.h @@ -153,12 +153,11 @@ gconv_parseconfdir (const char *dir, size_t dir_len) struct stat64 st; if (asprintf (&conf, "%s/%s", buf, ent->d_name) < 0) continue; - if (ent->d_type == DT_UNKNOWN - && (lstat64 (conf, &st) == -1 - || !S_ISREG (st.st_mode))) - continue; - found |= read_conf_file (conf, dir, dir_len); + if (ent->d_type != DT_UNKNOWN + || (lstat64 (conf, &st) != -1 && S_ISREG (st.st_mode))) + found |= read_conf_file (conf, dir, dir_len); + free (conf); } } |