File libvirt-conf-Fix-backport-of-metadata-API-code.patch of Package libvirt

From 7705900c436f9f8391ed9517db5c54feca375789 Mon Sep 17 00:00:00 2001
Message-Id: <7705900c436f9f8391ed9517db5c54feca375789@dist-git>
From: Peter Krempa <pkrempa@redhat.com>
Date: Thu, 17 Jul 2014 14:50:39 +0200
Subject: [PATCH] conf: Fix backport of metadata API code

https://bugzilla.redhat.com/show_bug.cgi?id=1115039

RHEL-only, problems introduced in backport

The clang checker found a few issues introduced by the backports of the
metadata code. As the code is already in dist-git this patch fixes up
the problems pointed out by Clang:

1) few possible strdup()'s of NULL argument
2) false positive as Clang considered the def local variable in
virDomainObjGetMetadata as uninitialized

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
---
 src/conf/domain_conf.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index b246155..e90b08c 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16585,7 +16585,7 @@ virDomainObjGetMetadata(virDomainObjPtr vm,
                         virCapsPtr caps,
                         unsigned int flags)
 {
-    virDomainDefPtr def;
+    virDomainDefPtr def = vm->def;
     char *ret = NULL;
 
     virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
@@ -16600,14 +16600,16 @@ virDomainObjGetMetadata(virDomainObjPtr vm,
 
     switch ((virDomainMetadataType) type) {
     case VIR_DOMAIN_METADATA_DESCRIPTION:
-        if (!(ret = strdup(def->description))) {
+        if (def->description &&
+            !(ret = strdup(def->description))) {
             virReportOOMError();
             goto cleanup;
         }
         break;
 
     case VIR_DOMAIN_METADATA_TITLE:
-        if (!(ret = strdup(def->title))) {
+        if (def->title &&
+            !(ret = strdup(def->title))) {
             virReportOOMError();
             goto cleanup;
         }
@@ -16647,12 +16649,13 @@ virDomainDefSetMetadata(virDomainDefPtr def,
     xmlDocPtr doc = NULL;
     xmlNodePtr old;
     xmlNodePtr new = NULL;
-    char *tmp;
+    char *tmp = NULL;
     int ret = -1;
 
     switch ((virDomainMetadataType) type) {
     case VIR_DOMAIN_METADATA_DESCRIPTION:
-        if (!(tmp = strdup(metadata)))
+        if (metadata &&
+            !(tmp = strdup(metadata)))
             goto no_memory;
 
         VIR_FREE(def->description);
@@ -16660,7 +16663,8 @@ virDomainDefSetMetadata(virDomainDefPtr def,
         break;
 
     case VIR_DOMAIN_METADATA_TITLE:
-        if (!(tmp = strdup(metadata)))
+        if (metadata &&
+            !(tmp = strdup(metadata)))
             goto no_memory;
 
         VIR_FREE(def->title);
-- 
2.0.2

openSUSE Build Service is sponsored by