summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2021-08-02 22:32:15 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2021-08-02 22:32:15 -0400
commit382b52b1207fbef856cd8a881d393655f2017e1d (patch)
treefdd90707f94089fb29c065bd60f4fbfae8c39856
parent1fc4a17e1c3d774c843bdfc4f4638df2a666870e (diff)
downloadrockbox-382b52b1207fbef856cd8a881d393655f2017e1d.tar.gz
rockbox-382b52b1207fbef856cd8a881d393655f2017e1d.tar.bz2
rockbox-382b52b1207fbef856cd8a881d393655f2017e1d.zip
filetypes.c filesize() guard against negative error values
buffer size is copied to an unsigned int for core_alloc Change-Id: I7b9ccab79554e55b22d39501ccb779036913258a
-rw-r--r--apps/filetypes.c16
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);