The -t option parses its argument with strtol and defines a lower limit of
1. But it ignores any invalid parameter silently.
Use the same strto* validation as the rest of batctl and print a user
readable error in case of an parsing error.
Fixes: 2474249a6312 ("[batctl] ping utility updated to latest batman adv")
Signed-off-by: Sven Eckelmann <[email protected]>
---
ping.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/ping.c b/ping.c
index 5551cd4..7ba872a 100644
--- a/ping.c
+++ b/ping.c
@@ -128,9 +128,16 @@ static int ping(struct state *state, int argc, char **argv)
loop_interval.tv_nsec = (long)(fractional_part *
1000000000l);
break;
case 't':
- timeout = strtol(optarg, NULL, 10);
- if (timeout < 1)
- timeout = 1;
+ tmp = strtol(optarg, &endptr, 10);
+ if (!endptr || *endptr != '\0' || endptr == optarg ||
+ tmp < 1 || tmp > INT_MAX) {
+ fprintf(stderr,
+ "Error - the supplied timeout is
invalid: %s\n",
+ optarg);
+ ping_usage();
+ return EXIT_FAILURE;
+ }
+ timeout = tmp;
break;
case 'R':
rr = 1;
--
2.47.3