From 1e1cf6c9df2564c30c4bfa7f98d18319fd4fe14b Mon Sep 17 00:00:00 2001 From: Dominik Csapak Date: Fri, 3 Mar 2017 09:17:58 +0100 Subject: [PATCH] use unsigned long for strtoul result strtoul gives back an unsigned long int, which may or may not be wider than a guint32 (depending on the platform) when it is wider, the assignment would parse vmids bigger than 2^32 but truncate them, giving back an invalid vmid Signed-off-by: Dominik Csapak --- data/src/memdb.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/data/src/memdb.c b/data/src/memdb.c index e10aac4..56044b4 100644 --- a/data/src/memdb.c +++ b/data/src/memdb.c @@ -210,19 +210,18 @@ name_is_vm_config( if (!name || name[0] < '1' || name[0] > '9') return FALSE; - char *end = NULL; errno = 0; /* see man strtoul */ - - guint32 vmid = strtoul(name, &end, 10); + + unsigned long int vmid = strtoul(name, &end, 10); if (!end || end[0] != '.' || end[1] != 'c'|| end[2] != 'o' || end[3] != 'n' || - end[4] != 'f' || end[5] != 0 || errno != 0) + end[4] != 'f' || end[5] != 0 || errno != 0 || vmid > G_MAXUINT32) return FALSE; if (vmid_ret) - *vmid_ret = vmid; + *vmid_ret = (guint32)vmid; return TRUE; } -- 2.39.2