]> granicus.if.org Git - sudo/commitdiff
Simplify range checks.
authorTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 20 Oct 2018 14:47:12 +0000 (08:47 -0600)
committerTodd C. Miller <Todd.Miller@sudo.ws>
Sat, 20 Oct 2018 14:47:12 +0000 (08:47 -0600)
No need to check for ERANGE in the cases where we also check
that the value is <= INT_MAX.  Found by PVS-Studio.

plugins/sudoers/iolog_util.c

index b25a51cd0abbf490ba0af76a32c90c87e0fe9249..6fd7ba3b303e6cee9e9385555cf3b64aa7d33b7e 100644 (file)
@@ -326,7 +326,6 @@ parse_timing(const char *buf, struct timespec *delay,
 
     switch (timing->event) {
     case IO_EVENT_SUSPEND:
-       errno = 0;
        ulval = strtoul(cp, &ep, 10);
        if (ep == cp || *ep != '\0')
            goto bad;
@@ -335,21 +334,19 @@ parse_timing(const char *buf, struct timespec *delay,
        timing->u.signo = (int)ulval;
        break;
     case IO_EVENT_WINSIZE:
-       errno = 0;
        ulval = strtoul(cp, &ep, 10);
        if (ep == cp || !isspace((unsigned char) *ep))
            goto bad;
-       if (ulval > INT_MAX || (errno == ERANGE && ulval == ULONG_MAX))
+       if (ulval > INT_MAX)
            goto bad;
        timing->u.winsize.rows = (int)ulval;
        for (cp = ep + 1; isspace((unsigned char) *cp); cp++)
            continue;
 
-       errno = 0;
        ulval = strtoul(cp, &ep, 10);
        if (ep == cp || *ep != '\0')
            goto bad;
-       if (ulval > INT_MAX || (errno == ERANGE && ulval == ULONG_MAX))
+       if (ulval > INT_MAX)
            goto bad;
        timing->u.winsize.cols = (int)ulval;
        break;
@@ -358,7 +355,8 @@ parse_timing(const char *buf, struct timespec *delay,
        ulval = strtoul(cp, &ep, 10);
        if (ep == cp || *ep != '\0')
            goto bad;
-       if (ulval > SIZE_MAX || (errno == ERANGE && ulval == ULONG_MAX))
+       /* Note: assumes SIZE_MAX == ULONG_MAX */
+       if (errno == ERANGE && ulval == ULONG_MAX)
            goto bad;
        timing->u.nbytes = (size_t)ulval;
        break;