summaryrefslogtreecommitdiff
path: root/util
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2015-02-11 12:30:43 +0100
committerMichael Tokarev <mjt@tls.msk.ru>2015-03-10 08:15:33 +0300
commitcc5d0e04ee313d0ceee5d8e4e697142eaf240dca (patch)
tree3b20300c8c787685262c9e6382e91dc72a83b817 /util
parent7c601803fb5f868a05ef762eebcc32bdfd1ebfdc (diff)
downloadqemu-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.c5
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;
}