]> git.proxmox.com Git - pve-cluster.git/commitdiff
use unsigned long for strtoul result
authorDominik Csapak <d.csapak@proxmox.com>
Fri, 3 Mar 2017 08:17:58 +0000 (09:17 +0100)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 6 Mar 2017 14:33:44 +0000 (15:33 +0100)
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 <d.csapak@proxmox.com>
data/src/memdb.c

index e10aac433d2c13d0ae1d5687abcae89fd021f277..56044b4b1a1bfecb9a84012265c8a90e559f87f5 100644 (file)
@@ -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;
 }