diff options
| author | Eharve14 <71228603+Eharve14@users.noreply.github.com> | 2022-01-15 09:33:03 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-15 15:33:03 +0100 |
| commit | 6e4588f379be0eb5b62fff65bf96aa1ca556ea96 (patch) | |
| tree | fd368e86c7da174acfb1ee45aeba6a534b00b467 /src/bin/jp2/opj_decompress.c | |
| parent | 1daaa0b909aebdf71be36238d16dfbec83c494ed (diff) | |
Added check for integer overflow in get_num_images (#1397)
As discussed in pull request 1396, added a check for integer overflow.
Change list:
Defined num_images as unsigned int
Moved the if statement to check for an empty directory to the beginning of the read directory section
Added a check to see if num images would roll back to zero when incrementing.
Diffstat (limited to 'src/bin/jp2/opj_decompress.c')
| -rw-r--r-- | src/bin/jp2/opj_decompress.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/src/bin/jp2/opj_decompress.c b/src/bin/jp2/opj_decompress.c index 0d3021cd..8ac2d9c7 100644 --- a/src/bin/jp2/opj_decompress.c +++ b/src/bin/jp2/opj_decompress.c @@ -44,6 +44,7 @@ #include <stdlib.h> #include <math.h> #include <time.h> +#include <limits.h> #ifdef _WIN32 #include "windirent.h" @@ -160,7 +161,7 @@ typedef struct opj_decompress_params { /* -------------------------------------------------------------------------- */ /* Declarations */ -int get_num_images(char *imgdirpath); +unsigned int get_num_images(char *imgdirpath); int load_images(dircnt_t *dirptr, char *imgdirpath); int get_file_format(const char *filename); char get_next_file(int imageno, dircnt_t *dirptr, img_fol_t *img_fol, @@ -370,11 +371,11 @@ static OPJ_BOOL parse_precision(const char* option, /* -------------------------------------------------------------------------- */ -int get_num_images(char *imgdirpath) +unsigned int get_num_images(char *imgdirpath) { DIR *dir; struct dirent* content; - int num_images = 0; + unsigned int num_images = 0; /*Reading the input images from given input directory*/ @@ -388,7 +389,13 @@ int get_num_images(char *imgdirpath) if (strcmp(".", content->d_name) == 0 || strcmp("..", content->d_name) == 0) { continue; } + if (num_images == UINT_MAX) { + fprintf(stderr, "Too many files in folder %s\n", imgdirpath); + num_images = 0; + break; + } num_images++; + } closedir(dir); return num_images; @@ -1367,6 +1374,11 @@ int main(int argc, char **argv) if (img_fol.set_imgdir == 1) { int it_image; num_images = get_num_images(img_fol.imgdirpath); + if (num_images == 0) { + fprintf(stderr, "Folder is empty\n"); + failed = 1; + goto fin; + } dirptr = (dircnt_t*)calloc(1, sizeof(dircnt_t)); if (!dirptr) { destroy_parameters(¶meters); @@ -1394,11 +1406,7 @@ int main(int argc, char **argv) failed = 1; goto fin; } - if (num_images == 0) { - fprintf(stderr, "Folder is empty\n"); - failed = 1; - goto fin; - } + } else { num_images = 1; } |
