From 31a3324b68827ed7fd6c545d04373b63bd828d6b Mon Sep 17 00:00:00 2001 From: Christopher Head Date: Mon, 9 Sep 2019 13:52:51 -0700 Subject: [PATCH] helper/command: clear errno before calling parser The C standard says that errno is set to ERANGE if an out-of-range value is returned by strtol, strtoul, et. al., but it does not say that errno is cleared if the function is successful (and, indeed, it is not on glibc). This means that, if errno is ERANGE before strtol is called, and if the value to be converted is exactly the maximum (or, for a signed conversion, the minimum) legal value, COMMAND_PARSE_NUMBER will erroneously indicate that the value is out of range. Change-Id: I8a8b50a815b408a38235968f1c1d70297ea1a6aa Signed-off-by: Christopher Head Reviewed-on: http://openocd.zylin.com/5298 Tested-by: jenkins Reviewed-by: Tarek BOCHKATI Reviewed-by: Tomas Vanek --- src/helper/command.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/helper/command.c b/src/helper/command.c index 7b93df6e1..d969933e2 100644 --- a/src/helper/command.c +++ b/src/helper/command.c @@ -1394,6 +1394,7 @@ void process_jim_events(struct command_context *cmd_ctx) return ERROR_COMMAND_ARGUMENT_INVALID; \ } \ char *end; \ + errno = 0; \ *ul = func(str, &end, 0); \ if (*end) { \ LOG_ERROR("Invalid command argument"); \