From: Todd C. Miller Date: Sat, 20 Oct 2018 14:47:12 +0000 (-0600) Subject: Simplify range checks. X-Git-Tag: SUDO_1_8_26^2~35 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=45652e6d7115fe5b087966c2ae3bf356220fd706;p=sudo Simplify range checks. No need to check for ERANGE in the cases where we also check that the value is <= INT_MAX. Found by PVS-Studio. --- diff --git a/plugins/sudoers/iolog_util.c b/plugins/sudoers/iolog_util.c index b25a51cd0..6fd7ba3b3 100644 --- a/plugins/sudoers/iolog_util.c +++ b/plugins/sudoers/iolog_util.c @@ -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;