photomosaics

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 102bc0b6fc9ce25146ab721de71d6ad3b8866158
parent 45a1499e177cbc9e1203f87ad76690934ef0dc1e
Author: Wilson Gheen <wilson@wilsonrgheen.com>
Date:   Sun, 15 Jan 2023 10:49:10 -0600

Add error-checking for overly long arguments and fix error message for -w/-l

Diffstat:
Mphotomosaics.c | 20+++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)

diff --git a/photomosaics.c b/photomosaics.c @@ -415,9 +415,10 @@ void usage(char *progname) { int main(int argc, char **argv) { ExceptionInfo *exception; Image *input_img, *output_img = NULL; - char input_img_filename[400]; + const size_t max_fn_len = 400; + char input_img_filename[max_fn_len]; input_img_filename[0] = 0; - char output_img_filename[400]; + char output_img_filename[max_fn_len]; output_img_filename[0] = 0; ImageInfo *image_info, *new_image_info = NULL; size_t length = 1, width = 1; @@ -429,25 +430,26 @@ int main(int argc, char **argv) { usage(argv[0]); return 0; case 'i': - strcpy(input_img_filename, optarg); + if(slen(optarg, max_fn_len) == max_fn_len) DIE(2, "Argument \"%s\" to option -i should be less than %zu characters.", optarg, max_fn_len) + strncat(input_img_filename, optarg, max_fn_len - 1); break; case 'l': if(!parse_ulong(optarg, &length)) - DIE(2, "Argument \"%s\" to option -l could not be parsed to a long long int.", optarg); + DIE(2, "Argument \"%s\" to option -l could not be parsed to an unsigned long int.", optarg); break; case 'o': - strcpy(output_img_filename, optarg); + if(slen(optarg, max_fn_len) == max_fn_len) DIE(2, "Argument \"%s\" to option -o should be less than %zu characters.", optarg, max_fn_len) + strncat(output_img_filename, optarg, max_fn_len - 1); break; case 'w': if(!parse_ulong(optarg, &width)) - DIE(2, "Argument \"%s\" to option -w could not be parsed to a long long int.", optarg); + DIE(2, "Argument \"%s\" to option -w could not be parsed to an unsigned long int.", optarg); break; } } - - if(slen(input_img_filename, 400) < 1) DIE(2, "No input image specified.%s", ""); - if(slen(output_img_filename, 400) < 1) DIE(2, "No output image specified.%s", ""); + if(slen(input_img_filename, max_fn_len) < 1) DIE(2, "No input image specified.%s", ""); + if(slen(output_img_filename, max_fn_len) < 1) DIE(2, "No output image specified.%s", ""); MagickCoreGenesis(*argv, MagickTrue); exception = AcquireExceptionInfo();