diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2015-02-11 12:30:43 +0100 |
---|---|---|
committer | Michael Tokarev <mjt@tls.msk.ru> | 2015-03-10 08:15:33 +0300 |
commit | cc5d0e04ee313d0ceee5d8e4e697142eaf240dca (patch) | |
tree | 3b20300c8c787685262c9e6382e91dc72a83b817 /util | |
parent | 7c601803fb5f868a05ef762eebcc32bdfd1ebfdc (diff) | |
download | qemu-cc5d0e04ee313d0ceee5d8e4e697142eaf240dca.tar.gz qemu-cc5d0e04ee313d0ceee5d8e4e697142eaf240dca.tar.bz2 qemu-cc5d0e04ee313d0ceee5d8e4e697142eaf240dca.zip |
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>
Diffstat (limited to 'util')
-rw-r--r-- | util/cutils.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/util/cutils.c b/util/cutils.c index c2250d1ba5..144b25c05a 100644 --- a/util/cutils.c +++ b/util/cutils.c @@ -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; } |