cutils: refine strtol error handling in parse_debug_env
Avoid truncation of a 64-bit long to a 32-bit int, and check for errno (especially ERANGE). Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
This commit is contained in:
parent
7c601803fb
commit
cc5d0e04ee
@ -537,16 +537,17 @@ int parse_debug_env(const char *name, int max, int initial)
|
||||
{
|
||||
char *debug_env = getenv(name);
|
||||
char *inv = NULL;
|
||||
int debug;
|
||||
long debug;
|
||||
|
||||
if (!debug_env) {
|
||||
return initial;
|
||||
}
|
||||
errno = 0;
|
||||
debug = strtol(debug_env, &inv, 10);
|
||||
if (inv == debug_env) {
|
||||
return initial;
|
||||
}
|
||||
if (debug < 0 || debug > max) {
|
||||
if (debug < 0 || debug > max || errno != 0) {
|
||||
fprintf(stderr, "warning: %s not in [0, %d]", name, max);
|
||||
return initial;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user