From 80888726b9e5d8d62a8b1e76615bb11a1c9ca191 Mon Sep 17 00:00:00 2001 From: IIMarckus Date: Thu, 29 Jun 2017 22:45:30 -0600 Subject: [PATCH] Check some errors (not enough). malloc can always fail. Check to avoid null dereference. malloc(0) is well defined but leads to an eventual crash on some systems. Check it too. --- tools/palette.c | 8 ++++++++ tools/pokemon_animation.c | 8 ++++++++ tools/pokemon_animation_graphics.c | 8 ++++++++ 3 files changed, 24 insertions(+) diff --git a/tools/palette.c b/tools/palette.c index ebb8e4fbf..397c62651 100644 --- a/tools/palette.c +++ b/tools/palette.c @@ -50,9 +50,17 @@ void print_palette(char* palette_filename) { fseek(f, 0, SEEK_END); size = ftell(f); + if (!size) { + fprintf(stderr, "empty file %s\n", palette_filename); + exit(1); + } rewind(f); bytes = malloc(size); + if (!bytes) { + fprintf(stderr, "malloc failure\n"); + exit(1); + } fseek(f, 0, SEEK_SET); fread(bytes, 1, size, f); diff --git a/tools/pokemon_animation.c b/tools/pokemon_animation.c index 5eadd6104..315a1729f 100644 --- a/tools/pokemon_animation.c +++ b/tools/pokemon_animation.c @@ -54,9 +54,17 @@ void make_frames(struct Frames* frames, struct Bitmasks* bitmasks, char* tilemap fseek(f, 0, SEEK_END); size = ftell(f); + if (!size) { + fprintf(stderr, "empty file %s\n", tilemap_filename); + exit(1); + } rewind(f); tilemap = malloc(size); + if (!tilemap) { + fprintf(stderr, "malloc failure\n"); + exit(1); + } fread(tilemap, 1, size, f); fclose(f); diff --git a/tools/pokemon_animation_graphics.c b/tools/pokemon_animation_graphics.c index f38850fb0..ae96d7f17 100644 --- a/tools/pokemon_animation_graphics.c +++ b/tools/pokemon_animation_graphics.c @@ -90,8 +90,16 @@ void create_tilemap(struct Tilemap* tilemap, struct Graphic* graphic, char* grap } fseek(f, 0, SEEK_END); graphics_size = ftell(f); + if (!graphics_size) { + fprintf(stderr, "empty file %s\n", graphics_filename); + exit(1); + } rewind(f); graphics = malloc(graphics_size); + if (!graphics) { + fprintf(stderr, "malloc failure\n"); + exit(1); + } fread(graphics, 1, graphics_size, f); fclose(f);