From 3501df487f5d6927ed987a0c9d3a0e29ec614265 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 10 Aug 2020 15:24:30 +0200 Subject: [PATCH] fairland: Check positional arguments more thoroughly fairland silently "corrects" some bad arguments. Reject them instead. It neglects to check others completely. Fix that. Signed-off-by: Markus Armbruster --- src/util/fairland.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/src/util/fairland.c b/src/util/fairland.c index 4f772eaf7..12349880a 100644 --- a/src/util/fairland.c +++ b/src/util/fairland.c @@ -407,26 +407,43 @@ parse_args(int argc, char *argv[]) ni = atoi(argv[2]); else ni = nc; + if (ni < 0) { + fprintf(stderr, "%s: number of islands must be >= 0\n", + program_name); + exit(1); + } if (argc > 3) is = atoi(argv[3]); else is = sc / 2; - if (is < 1) - is = 1; + if (is < 1) { + fprintf(stderr, "%s: size of islands must be > 0\n", + program_name); + exit(1); + } if (argc > 4) sp = atoi(argv[4]); else sp = DEFAULT_SPIKE; - sp = LIMIT_TO(sp, 0, 100); + if (sp < 0 || sp > 100) { + fprintf(stderr, + "%s: spike percentage must be between 0 and 100\n", + program_name); + exit(1); + } if (argc > 5) pm = atoi(argv[5]); else pm = DEFAULT_MOUNTAIN; - if (pm < 0) - pm = 0; + if (pm < 0 || pm > 100) { + fprintf(stderr, + "%s: mountain percentage must be between 0 and 100\n", + program_name); + exit(1); + } if (argc > 6) di = atoi(argv[6]); -- 2.43.0