From a79b453de1772bf2b94b16259c8cdfa7fc587dbe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Bl=C3=A4se?= Date: Fri, 8 Jan 2021 19:02:25 +0100 Subject: [PATCH] fff-random: Use strtol to parse numbers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Other than atoi, strtol allows to detect parsing errors. Therefore atoi is replaced with strtol and appropriate error checks are added. Fixes: #33 (gitea) Signed-off-by: Fabian Bläse Reviewed-by: Johannes Kimmel --- src/packages/fff/fff-random/Makefile | 2 +- src/packages/fff/fff-random/src/random.c | 34 ++++++++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/packages/fff/fff-random/Makefile b/src/packages/fff/fff-random/Makefile index e862505f..456c0cb2 100644 --- a/src/packages/fff/fff-random/Makefile +++ b/src/packages/fff/fff-random/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=fff-random -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) diff --git a/src/packages/fff/fff-random/src/random.c b/src/packages/fff/fff-random/src/random.c index 5d38d162..0f2013bb 100644 --- a/src/packages/fff/fff-random/src/random.c +++ b/src/packages/fff/fff-random/src/random.c @@ -6,6 +6,36 @@ */ #include #include +#include + +static int parse_int(char *str) { + char *endptr = NULL; + errno = 0; + long val = strtol(str, &endptr, 10); + + if (errno != 0) { + perror("strtol"); + exit(EXIT_FAILURE); + } + + if (endptr == str) { + fprintf(stderr, "No digits were found\n"); + exit(EXIT_FAILURE); + } + + if (*endptr != '\0') { + fprintf(stderr, "Further characters were found after number: \"%s\"\n", endptr); + exit(EXIT_FAILURE); + } + + int retVal = (int) val; + if (val != retVal) { + fprintf(stderr, "Given number is out of range\n"); + exit(EXIT_FAILURE); + } + + return retVal; +} int main(int argc, char **argv) { @@ -22,8 +52,8 @@ int main(int argc, char **argv) } else if (argc == 3) { - from = atoi(argv[1]); - to = atoi(argv[2]); + from = parse_int(argv[1]); + to = parse_int(argv[2]); } diff = to - from;