Simplify code by replacing strtol() with strtonum()
authorjob <job@openbsd.org>
Wed, 1 Sep 2021 16:09:54 +0000 (16:09 +0000)
committerjob <job@openbsd.org>
Wed, 1 Sep 2021 16:09:54 +0000 (16:09 +0000)
Feedback from deraadt@

usr.bin/timeout/timeout.c

index 6ad14e8..b2db5f1 100644 (file)
@@ -99,9 +99,10 @@ parse_duration(const char *duration)
 static int
 parse_signal(const char *str)
 {
-       char    *ep;
-       int      i;
-       long     sig;
+       char            *ep;
+       int              i;
+       long             sig;
+       const char      *errstr;
 
        if (strncasecmp(str, "SIG", 3) == 0) {
                str += 3;
@@ -115,11 +116,8 @@ parse_signal(const char *str)
        }
 
        errno = 0;
-       sig = strtol(str, &ep, 10);
-
-       if (str[0] == '\0' || *ep != '\0')
-               goto err;
-       if (errno == ERANGE && (sig == LONG_MAX || sig == LONG_MIN))
+       sig = strtonum(str, LONG_MIN, LONG_MAX, &errstr);
+       if (errstr != NULL)
                goto err;
        if (sig >= NSIG || sig < 0)
                goto err;