From 70bf599f4c3811ca0b3682077fbac0b69c8f9853 Mon Sep 17 00:00:00 2001 From: Hwankyu Jhun Date: Mon, 6 Sep 2021 09:39:11 +0900 Subject: [PATCH 1/1] Fix static analysis issues - Fixes resource leak - Fixes uninitialized pointer read Change-Id: I261b92e787162dd54983267ac6aa80d0c9e038ad Signed-off-by: Hwankyu Jhun --- xdgmime/src/xdgmime.c | 22 ++++++++++++++-------- xdgmime/src/xdgmimecache.c | 20 +++++++++++++------- xdgmime/src/xdgmimeglobs2.c | 5 ++++- 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/xdgmime/src/xdgmime.c b/xdgmime/src/xdgmime.c index f898cc1..03ac931 100644 --- a/xdgmime/src/xdgmime.c +++ b/xdgmime/src/xdgmime.c @@ -553,22 +553,25 @@ xdg_mime_get_mime_type_for_file (const char *file_name, file = fopen (file_name, "r"); if (file == NULL) - { - free (data); - return XDG_MIME_TYPE_UNKNOWN; - } + return XDG_MIME_TYPE_UNKNOWN; if (!statbuf) { fd = fileno(file); if (fstat (fd, &buf) != 0) - return XDG_MIME_TYPE_UNKNOWN; + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } statbuf = &buf; } if (!S_ISREG (statbuf->st_mode)) - return XDG_MIME_TYPE_UNKNOWN; + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } /* FIXME: Need to make sure that max_extent isn't totally broken. This could * be large and need getting from a stream instead of just reading it all @@ -576,8 +579,11 @@ xdg_mime_get_mime_type_for_file (const char *file_name, max_extent = _xdg_mime_magic_get_buffer_extents (global_magic); data = malloc (max_extent); if (data == NULL) - return XDG_MIME_TYPE_UNKNOWN; - + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } + bytes_read = fread (data, 1, max_extent, file); if (ferror (file)) { diff --git a/xdgmime/src/xdgmimecache.c b/xdgmime/src/xdgmimecache.c index dd52f21..08188b5 100644 --- a/xdgmime/src/xdgmimecache.c +++ b/xdgmime/src/xdgmimecache.c @@ -745,22 +745,25 @@ _xdg_mime_cache_get_mime_type_for_file (const char *file_name, file = fopen (file_name, "r"); if (file == NULL) - { - free (data); - return XDG_MIME_TYPE_UNKNOWN; - } + return XDG_MIME_TYPE_UNKNOWN; if (!statbuf) { fd = fileno(file); if (fstat (fd, &buf) != 0) - return XDG_MIME_TYPE_UNKNOWN; + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } statbuf = &buf; } if (!S_ISREG (statbuf->st_mode)) - return XDG_MIME_TYPE_UNKNOWN; + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } /* FIXME: Need to make sure that max_extent isn't totally broken. This could * be large and need getting from a stream instead of just reading it all @@ -768,7 +771,10 @@ _xdg_mime_cache_get_mime_type_for_file (const char *file_name, max_extent = _xdg_mime_cache_get_max_buffer_extents (); data = malloc (max_extent); if (data == NULL) - return XDG_MIME_TYPE_UNKNOWN; + { + fclose(file); + return XDG_MIME_TYPE_UNKNOWN; + } bytes_read = fread (data, 1, max_extent, file); if (ferror (file)) diff --git a/xdgmime/src/xdgmimeglobs2.c b/xdgmime/src/xdgmimeglobs2.c index 65d3c8f..c30aa86 100644 --- a/xdgmime/src/xdgmimeglobs2.c +++ b/xdgmime/src/xdgmimeglobs2.c @@ -238,7 +238,10 @@ mime_type_info_list_reload(mime_type_info_list *mtil) * If reconstruction is not needed, just exit function */ fd = fileno(globs2); if (fstat(fd, &globs2_stat) || - globs2_stat.st_mtime <= mtil->globs2_mtime ) return; + globs2_stat.st_mtime <= mtil->globs2_mtime ) { + fclose(globs2); + return; + } /* clean old mtil */ mime_type_info **mti; -- 2.7.4