mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-22 01:49:11 +00:00
Make sure we don't go past the end of the string when out of range.
This commit is contained in:
parent
e339d9950d
commit
1037b685eb
@ -109,12 +109,16 @@ sudo_strtonumx(const char *str, long long minval, long long maxval, char **endp,
|
||||
break;
|
||||
ch -= '0';
|
||||
if (result < lastval || (result == lastval && ch > remainder)) {
|
||||
/* Skip remaining digits. */
|
||||
do {
|
||||
ch = *cp++;
|
||||
} while (isdigit(ch));
|
||||
errval = STN_TOOSMALL;
|
||||
break;
|
||||
} else {
|
||||
errval = STN_VALID;
|
||||
result *= 10;
|
||||
result -= ch;
|
||||
errval = STN_VALID;
|
||||
}
|
||||
}
|
||||
if (result > maxval)
|
||||
@ -127,12 +131,16 @@ sudo_strtonumx(const char *str, long long minval, long long maxval, char **endp,
|
||||
break;
|
||||
ch -= '0';
|
||||
if (result > lastval || (result == lastval && ch > remainder)) {
|
||||
/* Skip remaining digits. */
|
||||
do {
|
||||
ch = *cp++;
|
||||
} while (isdigit(ch));
|
||||
errval = STN_TOOBIG;
|
||||
break;
|
||||
} else {
|
||||
errval = STN_VALID;
|
||||
result *= 10;
|
||||
result += ch;
|
||||
errval = STN_VALID;
|
||||
}
|
||||
}
|
||||
if (result < minval)
|
||||
@ -153,20 +161,12 @@ done:
|
||||
*errstrp = N_("invalid value");
|
||||
break;
|
||||
case STN_TOOSMALL:
|
||||
/* Skip remaining digits. */
|
||||
do {
|
||||
ch = *cp++;
|
||||
} while (isdigit(ch));
|
||||
result = 0;
|
||||
errno = ERANGE;
|
||||
if (errstrp != NULL)
|
||||
*errstrp = N_("value too small");
|
||||
break;
|
||||
case STN_TOOBIG:
|
||||
/* Skip remaining digits. */
|
||||
do {
|
||||
ch = *cp++;
|
||||
} while (isdigit(ch));
|
||||
result = 0;
|
||||
errno = ERANGE;
|
||||
if (errstrp != NULL)
|
||||
|
Loading…
x
Reference in New Issue
Block a user