[libvirt] [PATCH] Enforce return check on virAsprintf() calls

John Ferlan jferlan at redhat.com
Wed Jan 30 20:43:39 UTC 2013


Way back when I started making changes for Coverity messages my first set
were to a bunch of CHECKED_RETURN errors.  In particular virAsprintf() had
a few callers that Coverity noted didn't check their return (although some
did check if the buffer being printed to was NULL or not).

It was suggested at the time as a further patch an ATTRIBUTE_RETURN_CHECK
should be added to virAsprintf(), see:

https://www.redhat.com/archives/libvir-list/2013-January/msg00120.html

This patch does that and fixes two more instances not found by Coverity
that failed the check.


---
 src/util/virutil.h          | 3 ++-
 src/xen/xend_internal.c     | 6 ++----
 tests/networkxml2conftest.c | 5 +++--
 3 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/src/util/virutil.h b/src/util/virutil.h
index 5a08c81..c386d24 100644
--- a/src/util/virutil.h
+++ b/src/util/virutil.h
@@ -200,7 +200,8 @@ int virParseNumber(const char **str);
 int virParseVersionString(const char *str, unsigned long *version,
                           bool allowMissing);
 int virAsprintf(char **strp, const char *fmt, ...)
-    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 3);
+    ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 3)
+    ATTRIBUTE_RETURN_CHECK;
 int virVasprintf(char **strp, const char *fmt, va_list list)
     ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_FMT_PRINTF(2, 0);
 char *virStrncpy(char *dest, const char *src, size_t n, size_t destbytes)
diff --git a/src/xen/xend_internal.c b/src/xen/xend_internal.c
index b03b7bc..3036cbb 100644
--- a/src/xen/xend_internal.c
+++ b/src/xen/xend_internal.c
@@ -2738,10 +2738,8 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
             virDevicePCIAddress PCIAddr;
 
             PCIAddr = dev->data.hostdev->source.subsys.u.pci;
-            virAsprintf(&target, "PCI device: %.4x:%.2x:%.2x", PCIAddr.domain,
-                                 PCIAddr.bus, PCIAddr.slot);
-
-            if (target == NULL) {
+            if (virAsprintf(&target, "PCI device: %.4x:%.2x:%.2x",
+                            PCIAddr.domain, PCIAddr.bus, PCIAddr.slot) < 0) {
                 virReportOOMError();
                 goto cleanup;
             }
diff --git a/tests/networkxml2conftest.c b/tests/networkxml2conftest.c
index 3979540..fd24f74 100644
--- a/tests/networkxml2conftest.c
+++ b/tests/networkxml2conftest.c
@@ -102,8 +102,9 @@ testDnsmasqLeaseFileName(const char *netname)
 {
     char *leasefile;
 
-    virAsprintf(&leasefile, "/var/lib/libvirt/dnsmasq/%s.leases",
-                netname);
+    if (virAsprintf(&leasefile, "/var/lib/libvirt/dnsmasq/%s.leases",
+                    netname) < 0)
+        return NULL;
 
     return leasefile;
 }
-- 
1.7.11.7




More information about the libvir-list mailing list