diff options
author | William Wilgus <wilgus.william@gmail.com> | 2021-08-02 22:32:15 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2021-08-02 22:32:15 -0400 |
commit | 382b52b1207fbef856cd8a881d393655f2017e1d (patch) | |
tree | fdd90707f94089fb29c065bd60f4fbfae8c39856 /apps/filetypes.c | |
parent | 1fc4a17e1c3d774c843bdfc4f4638df2a666870e (diff) |
filetypes.c filesize() guard against negative error values
buffer size is copied to an unsigned int for core_alloc
Change-Id: I7b9ccab79554e55b22d39501ccb779036913258a
Diffstat (limited to 'apps/filetypes.c')
-rw-r--r-- | apps/filetypes.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/apps/filetypes.c b/apps/filetypes.c index 7f7c198cb5..b6a557a6d2 100644 --- a/apps/filetypes.c +++ b/apps/filetypes.c @@ -185,7 +185,8 @@ static int filetype_count = 0; static unsigned char highest_attr = 0; static int viewer_count = 0; -static int strdup_handle, strdup_bufsize, strdup_cur_idx; +static int strdup_handle, strdup_cur_idx; +static size_t strdup_bufsize; static int move_callback(int handle, void* current, void* new) { /*could compare to strdup_handle, but ops is only used once */ @@ -353,13 +354,20 @@ void filetype_init(void) if (fd < 0) return; - strdup_bufsize = filesize(fd); - strdup_handle = core_alloc_ex("filetypes", strdup_bufsize, &ops); - if (strdup_handle <= 0) + off_t filesz = filesize(fd); + + if (filesz > 0) + { + strdup_bufsize = (size_t)filesz; + strdup_handle = core_alloc_ex("filetypes", strdup_bufsize, &ops); + } + + if (filesz <= 0 || strdup_handle <= 0) { close(fd); return; } + read_builtin_types(); read_config(fd); close(fd); |