A few more small bugs
* src/node_device.c: Don't strdup() a NULL device parent
* src/qemu_conf.c: Don't try to run access() on a NULL binary path
* src/security_selinux.c Make sure result from readlink() is NULL
terminated
* src/storage_conf.c: DOn't free 'mode' while it is still used
diff -r b73fe666feff src/node_device.c
--- a/src/node_device.c Fri Mar 27 16:14:49 2009 +0000
+++ b/src/node_device.c Mon Mar 30 14:37:45 2009 +0100
@@ -176,9 +176,14 @@ static char *nodeDeviceGetParent(virNode
goto cleanup;
}
- ret = strdup(obj->def->parent);
- if (!ret)
- virReportOOMError(dev->conn);
+ if (obj->def->parent) {
+ ret = strdup(obj->def->parent);
+ if (!ret)
+ virReportOOMError(dev->conn);
+ } else {
+ virNodeDeviceReportError(dev->conn, VIR_ERR_INTERNAL_ERROR,
+ "%s", _("no parent for this
device"));
+ }
cleanup:
if (obj)
diff -r b73fe666feff src/qemu_conf.c
--- a/src/qemu_conf.c Fri Mar 27 16:14:49 2009 +0000
+++ b/src/qemu_conf.c Mon Mar 30 14:37:45 2009 +0100
@@ -269,7 +269,7 @@ qemudCapsInitGuest(virCapsPtr caps,
* which can be used with magic cpu choice
*/
hasbase = (access(info->binary, X_OK) == 0);
- hasaltbase = (access(info->altbinary, X_OK) == 0);
+ hasaltbase = (info->altbinary && access(info->altbinary, X_OK) == 0);
/* Can use acceleration for KVM/KQEMU if
* - host & guest arches match
diff -r b73fe666feff src/security_selinux.c
--- a/src/security_selinux.c Fri Mar 27 16:14:49 2009 +0000
+++ b/src/security_selinux.c Mon Mar 30 14:37:45 2009 +0100
@@ -303,11 +303,13 @@ SELinuxRestoreSecurityImageLabel(virConn
return -1;
if (S_ISLNK(buf.st_mode)) {
+ int n;
if (VIR_ALLOC_N(newpath, buf.st_size + 1) < 0)
return -1;
- if (readlink(path, newpath, buf.st_size) < 0)
+ if ((n =readlink(path, newpath, buf.st_size)) < 0)
goto err;
+ buf.st_size[n] = '\0';
path = newpath;
if (stat(path, &buf) != 0)
goto err;
diff -r b73fe666feff src/storage_conf.c
--- a/src/storage_conf.c Fri Mar 27 16:14:49 2009 +0000
+++ b/src/storage_conf.c Mon Mar 30 14:37:45 2009 +0100
@@ -401,12 +401,13 @@ virStorageDefParsePerms(virConnectPtr co
} else {
char *end = NULL;
perms->mode = strtol(mode, &end, 8);
- VIR_FREE(mode);
if (*end || perms->mode < 0 || perms->mode > 0777) {
+ VIR_FREE(mode);
virStorageReportError(conn, VIR_ERR_XML_ERROR,
"%s", _("malformed octal mode"));
goto error;
}
+ VIR_FREE(mode);
}
if (virXPathNode(conn, "./owner", ctxt) == NULL) {
Daniel
--
|: Red Hat, Engineering, London -o-
http://people.redhat.com/berrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org -o-
http://ovirt.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|