From 382b52b1207fbef856cd8a881d393655f2017e1d Mon Sep 17 00:00:00 2001 From: William Wilgus Date: Mon, 2 Aug 2021 22:32:15 -0400 Subject: filetypes.c filesize() guard against negative error values buffer size is copied to an unsigned int for core_alloc Change-Id: I7b9ccab79554e55b22d39501ccb779036913258a --- apps/filetypes.c | 16 ++++++++++++---- 1 file 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); -- cgit v1.2.3