[libvirt] [PATCH] tests: Lower stack usage below 4096 bytes

Matthias Bolte matthias.bolte at googlemail.com
Sun Apr 24 22:26:52 UTC 2011


Make virtTestLoadFile allocate the buffer to read the file into.

Fix logic error in virtTestLoadFile, stop reading on the an empty line.

Use virFileReadLimFD in virtTestCaptureProgramOutput.
---
 m4/virt-compile-warnings.m4    |   10 ++---
 tests/commandhelper.c          |    5 +-
 tests/commandtest.c            |   14 ++----
 tests/conftest.c               |   29 +++++++++----
 tests/cputest.c                |   66 ++++++++++++++++++-------------
 tests/esxutilstest.c           |    2 +
 tests/interfacexml2xmltest.c   |   33 ++++++++++------
 tests/networkxml2xmltest.c     |   51 ++++++++++++++---------
 tests/nodedevxml2xmltest.c     |   34 ++++++++++------
 tests/nodeinfotest.c           |   67 ++++++++++++++++++++-----------
 tests/nwfilterxml2xmltest.c    |   54 +++++++++++++++----------
 tests/qemuargv2xmltest.c       |   43 ++++++++++++--------
 tests/qemuhelptest.c           |   13 +++---
 tests/qemuxml2argvtest.c       |   56 ++++++++++++++++----------
 tests/qemuxml2xmltest.c        |   43 +++++++++++---------
 tests/sexpr2xmltest.c          |   51 ++++++++++++++---------
 tests/storagepoolxml2xmltest.c |   51 ++++++++++++++---------
 tests/storagevolxml2xmltest.c  |   65 ++++++++++++++++++-------------
 tests/testutils.c              |   69 ++++++++++++++------------------
 tests/testutils.h              |    8 +---
 tests/virshtest.c              |   65 +++++++++++++-----------------
 tests/vmx2xmltest.c            |   45 ++++++++++++---------
 tests/xencapstest.c            |   38 ++++++++---------
 tests/xmconfigtest.c           |   85 +++++++++++++++++++++++----------------
 tests/xml2sexprtest.c          |   53 +++++++++++++++----------
 tests/xml2vmxtest.c            |   45 ++++++++++++---------
 26 files changed, 624 insertions(+), 471 deletions(-)

diff --git a/m4/virt-compile-warnings.m4 b/m4/virt-compile-warnings.m4
index 295fd9b..305036f 100644
--- a/m4/virt-compile-warnings.m4
+++ b/m4/virt-compile-warnings.m4
@@ -88,12 +88,10 @@ AC_DEFUN([LIBVIRT_COMPILE_WARNINGS],[
         # that one off, so we need to manually enable this again
         gl_WARN_ADD([-Wjump-misses-init])
 
-        # This should be < 256 really, but with PATH_MAX everywhere
-        # we have doom, even with 4096. In fact we have some functions
-        # with several PATH_MAX sized variables :-( We should kill off
-        # all PATH_MAX usage and then lower this limit
-        gl_WARN_ADD([-Wframe-larger-than=65700])
-        dnl gl_WARN_ADD([-Wframe-larger-than=4096])
+        # This should be < 256 really. Currently we're down to 4096,
+        # but using 1024 bytes sized buffers (mostly for virStrerror)
+        # stops us from going down further
+        gl_WARN_ADD([-Wframe-larger-than=4096])
         dnl gl_WARN_ADD([-Wframe-larger-than=256])
 
         # Extra special flags
diff --git a/tests/commandhelper.c b/tests/commandhelper.c
index 46c00f4..99ba22e 100644
--- a/tests/commandhelper.c
+++ b/tests/commandhelper.c
@@ -99,8 +99,8 @@ int main(int argc, char **argv) {
     }
 
     fprintf(log, "DAEMON:%s\n", getpgrp() == getsid(0) ? "yes" : "no");
-    char cwd[1024];
-    if (!getcwd(cwd, sizeof(cwd)))
+    char *cwd = NULL;
+    if (!(cwd = getcwd(NULL, 0)))
         return EXIT_FAILURE;
     if (strlen(cwd) > strlen("/commanddata") &&
         STREQ(cwd + strlen(cwd) - strlen("/commanddata"), "/commanddata"))
@@ -137,5 +137,6 @@ int main(int argc, char **argv) {
     return EXIT_SUCCESS;
 
 error:
+    free(cwd);
     return EXIT_FAILURE;
 }
diff --git a/tests/commandtest.c b/tests/commandtest.c
index c313a2c..a728d10 100644
--- a/tests/commandtest.c
+++ b/tests/commandtest.c
@@ -47,21 +47,18 @@ mymain(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
 #else
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
 
 static int checkoutput(const char *testname)
 {
     int ret = -1;
-    char cwd[1024];
     char *expectname = NULL;
     char *expectlog = NULL;
     char *actualname = NULL;
     char *actuallog = NULL;
 
-    if (!getcwd(cwd, sizeof(cwd)))
-        return -1;
-
     if (virAsprintf(&expectname, "%s/commanddata/%s.log", abs_srcdir,
                     testname) < 0)
         goto cleanup;
@@ -545,12 +542,12 @@ cleanup:
 static int test15(const void *unused ATTRIBUTE_UNUSED)
 {
     virCommandPtr cmd = virCommandNew(abs_builddir "/commandhelper");
-    char *cwd = NULL;
+    char *wd = NULL;
     int ret = -1;
 
-    if (virAsprintf(&cwd, "%s/commanddata", abs_srcdir) < 0)
+    if (virAsprintf(&wd, "%s/commanddata", abs_srcdir) < 0)
         goto cleanup;
-    virCommandSetWorkingDirectory(cmd, cwd);
+    virCommandSetWorkingDirectory(cmd, wd);
 
     if (virCommandRun(cmd, NULL) < 0) {
         virErrorPtr err = virGetLastError();
@@ -561,7 +558,7 @@ static int test15(const void *unused ATTRIBUTE_UNUSED)
     ret = checkoutput("test15");
 
 cleanup:
-    VIR_FREE(cwd);
+    VIR_FREE(wd);
     virCommandFree(cmd);
 
     return ret;
@@ -757,7 +754,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
     int fd;
 
     abs_srcdir = getenv("abs_srcdir");
diff --git a/tests/conftest.c b/tests/conftest.c
index a7977bb..6514f4d 100644
--- a/tests/conftest.c
+++ b/tests/conftest.c
@@ -6,32 +6,43 @@
 #include <string.h>
 #include <errno.h>
 #include "conf.h"
+#include "memory.h"
 
-int main(int argc, char **argv) {
-    int ret;
+int main(int argc, char **argv)
+{
+    int ret, exit_code = EXIT_FAILURE;
     virConfPtr conf;
     int len = 10000;
-    char buffer[10000];
+    char *buffer = NULL;
 
     if (argc != 2) {
         fprintf(stderr, "Usage: %s conf_file\n", argv[0]);
-        exit(EXIT_FAILURE);
+        goto cleanup;
     }
 
+    if (VIR_ALLOC_N(buffer, len) < 0) {
+        fprintf(stderr, "out of memory\n");
+        goto cleanup;
+    }
     conf = virConfReadFile(argv[1], 0);
     if (conf == NULL) {
         fprintf(stderr, "Failed to process %s\n", argv[1]);
-        exit(EXIT_FAILURE);
+        goto cleanup;
     }
-    ret = virConfWriteMem(&buffer[0], &len, conf);
+    ret = virConfWriteMem(buffer, &len, conf);
     if (ret < 0) {
         fprintf(stderr, "Failed to serialize %s back\n", argv[1]);
-        exit(EXIT_FAILURE);
+        goto cleanup;
     }
     virConfFree(conf);
     if (fwrite(buffer, 1, len, stdout) != len) {
         fprintf(stderr, "Write failed: %s\n", strerror (errno));
-        exit(EXIT_FAILURE);
+        goto cleanup;
     }
-    exit(EXIT_SUCCESS);
+
+    exit_code = EXIT_SUCCESS;
+
+cleanup:
+    VIR_FREE(buffer);
+    return exit_code;
 }
diff --git a/tests/cputest.c b/tests/cputest.c
index bd06958..831fa81 100644
--- a/tests/cputest.c
+++ b/tests/cputest.c
@@ -40,11 +40,11 @@
 #include "cpu/cpu_map.h"
 
 static const char *progname;
+static char cwd[PATH_MAX];
 static const char *abs_srcdir;
 static const char *abs_top_srcdir;
 
 #define VIR_FROM_THIS VIR_FROM_CPU
-#define MAX_FILE 4096
 
 enum compResultShadow {
     ERROR           = VIR_CPU_COMPARE_ERROR,
@@ -91,14 +91,13 @@ struct data {
 static virCPUDefPtr
 cpuTestLoadXML(const char *arch, const char *name)
 {
-    char xml[PATH_MAX];
+    char *xml = NULL;
     xmlDocPtr doc = NULL;
     xmlXPathContextPtr ctxt = NULL;
     virCPUDefPtr cpu = NULL;
 
-    snprintf(xml, PATH_MAX,
-             "%s/cputestdata/%s-%s.xml",
-             abs_srcdir, arch, name);
+    if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0)
+        goto cleanup;
 
     if (!(doc = virXMLParseFile(xml)) ||
         !(ctxt = xmlXPathNewContext(doc)))
@@ -110,6 +109,7 @@ cpuTestLoadXML(const char *arch, const char *name)
 cleanup:
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(doc);
+    free(xml);
     return cpu;
 }
 
@@ -119,7 +119,7 @@ cpuTestLoadMultiXML(const char *arch,
                     const char *name,
                     unsigned int *count)
 {
-    char xml[PATH_MAX];
+    char *xml = NULL;
     xmlDocPtr doc = NULL;
     xmlXPathContextPtr ctxt = NULL;
     xmlNodePtr *nodes = NULL;
@@ -127,9 +127,8 @@ cpuTestLoadMultiXML(const char *arch,
     int n;
     int i;
 
-    snprintf(xml, PATH_MAX,
-             "%s/cputestdata/%s-%s.xml",
-             abs_srcdir, arch, name);
+    if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml", abs_srcdir, arch, name) < 0)
+        goto cleanup;
 
     if (!(doc = virXMLParseFile(xml)) ||
         !(ctxt = xmlXPathNewContext(doc)))
@@ -151,6 +150,7 @@ cpuTestLoadMultiXML(const char *arch,
     *count = n;
 
 cleanup:
+    free(xml);
     free(nodes);
     xmlXPathFreeContext(ctxt);
     xmlFreeDoc(doc);
@@ -172,17 +172,16 @@ cpuTestCompareXML(const char *arch,
                   const virCPUDefPtr cpu,
                   const char *name)
 {
-    char xml[PATH_MAX];
-    char expected[MAX_FILE];
-    char *expectedPtr = &(expected[0]);
+    char *xml = NULL;
+    char *expected = NULL;
     char *actual = NULL;
     int ret = -1;
 
-    snprintf(xml, PATH_MAX,
-             "%s/cputestdata/%s-%s.xml",
-             abs_srcdir, arch, name);
+    if (virAsprintf(&xml, "%s/cputestdata/%s-%s.xml",
+                    abs_srcdir, arch, name) < 0)
+        goto cleanup;
 
-    if (virtTestLoadFile(xml, &expectedPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &expected) < 0)
         goto cleanup;
 
     if (!(actual = virCPUDefFormat(cpu, NULL, 0)))
@@ -196,6 +195,8 @@ cpuTestCompareXML(const char *arch,
     ret = 0;
 
 cleanup:
+    free(xml);
+    free(expected);
     free(actual);
     return ret;
 }
@@ -335,7 +336,7 @@ cpuTestBaseline(const void *arg)
     virCPUDefPtr *cpus = NULL;
     virCPUDefPtr baseline = NULL;
     unsigned int ncpus = 0;
-    char result[PATH_MAX];
+    char *result = NULL;
     unsigned int i;
 
     if (!(cpus = cpuTestLoadMultiXML(data->arch, data->name, &ncpus)))
@@ -355,7 +356,9 @@ cpuTestBaseline(const void *arg)
     if (!baseline)
         goto cleanup;
 
-    snprintf(result, PATH_MAX, "%s-result", data->name);
+    if (virAsprintf(&result, "%s-result", data->name) < 0)
+        goto cleanup;
+
     if (cpuTestCompareXML(data->arch, baseline, result) < 0)
         goto cleanup;
 
@@ -384,6 +387,7 @@ cleanup:
         free(cpus);
     }
     virCPUDefFree(baseline);
+    free(result);
     return ret;
 }
 
@@ -395,7 +399,7 @@ cpuTestUpdate(const void *arg)
     int ret = -1;
     virCPUDefPtr host = NULL;
     virCPUDefPtr cpu = NULL;
-    char result[PATH_MAX];
+    char *result = NULL;
 
     if (!(host = cpuTestLoadXML(data->arch, data->host)) ||
         !(cpu = cpuTestLoadXML(data->arch, data->name)))
@@ -404,12 +408,15 @@ cpuTestUpdate(const void *arg)
     if (cpuUpdate(cpu, host) < 0)
         goto cleanup;
 
-    snprintf(result, PATH_MAX, "%s+%s", data->host, data->name);
+    if (virAsprintf(&result, "%s+%s", data->host, data->name) < 0)
+        goto cleanup;
+
     ret = cpuTestCompareXML(data->arch, cpu, result);
 
 cleanup:
     virCPUDefFree(host);
     virCPUDefFree(cpu);
+    free(result);
     return ret;
 }
 
@@ -467,10 +474,10 @@ static int (*cpuTest[])(const void *) = {
 static int
 cpuTestRun(const char *name, const struct data *data)
 {
-    char label[PATH_MAX];
+    char *label = NULL;
 
-    snprintf(label, PATH_MAX, "CPU %s(%s): %s",
-             apis[data->api], data->arch, name);
+    if (virAsprintf(&label, "CPU %s(%s): %s", apis[data->api], data->arch, name) < 0)
+        return -1;
 
     free(virtTestLogContentAndReset());
 
@@ -482,9 +489,12 @@ cpuTestRun(const char *name, const struct data *data)
                 fprintf(stderr, "\n%s\n", log);
             free(log);
         }
+
+        free(label);
         return -1;
     }
 
+    free(label);
     return 0;
 }
 
@@ -497,8 +507,7 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
-    char map[PATH_MAX];
+    char *map = NULL;
 
     progname = argv[0];
 
@@ -515,9 +524,11 @@ mymain(int argc, char **argv)
     if (!abs_top_srcdir)
         abs_top_srcdir = "..";
 
-    snprintf(map, PATH_MAX, "%s/src/cpu/cpu_map.xml", abs_top_srcdir);
-    if (cpuMapOverride(map) < 0)
+    if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
+        cpuMapOverride(map) < 0) {
+        free(map);
         return EXIT_FAILURE;
+    }
 
 #define DO_TEST(arch, api, name, host, cpu,                             \
                 models, nmodels, preferred, result)                     \
@@ -627,6 +638,7 @@ mymain(int argc, char **argv)
     DO_TEST_GUESTDATA("x86", "host", "guest", models, "qemu64", 0);
     DO_TEST_GUESTDATA("x86", "host", "guest", nomodel, NULL, -1);
 
+    free(map);
     return (ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 
diff --git a/tests/esxutilstest.c b/tests/esxutilstest.c
index b6bf87b..78761a1 100644
--- a/tests/esxutilstest.c
+++ b/tests/esxutilstest.c
@@ -276,6 +276,7 @@ testEscapeDatastoreItem(const void *data ATTRIBUTE_UNUSED)
         }
     }
 
+    VIR_FREE(escaped);
     return 0;
 }
 
@@ -317,6 +318,7 @@ testConvertWindows1252ToUTF8(const void *data ATTRIBUTE_UNUSED)
         }
     }
 
+    VIR_FREE(utf8);
     return 0;
 }
 
diff --git a/tests/interfacexml2xmltest.c b/tests/interfacexml2xmltest.c
index 094ccf5..26a19ab 100644
--- a/tests/interfacexml2xmltest.c
+++ b/tests/interfacexml2xmltest.c
@@ -14,19 +14,19 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
 
-
-static int testCompareXMLToXMLFiles(const char *xml) {
-    char xmlData[MAX_FILE];
-    char *xmlPtr = &(xmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *xml)
+{
+    char *xmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virInterfaceDefPtr dev = NULL;
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &xmlData) < 0)
         goto fail;
 
     if (!(dev = virInterfaceDefParseString(xmlData)))
@@ -43,16 +43,26 @@ static int testCompareXMLToXMLFiles(const char *xml) {
     ret = 0;
 
  fail:
+    free(xmlData);
     free(actual);
     virInterfaceDefFree(dev);
     return ret;
 }
 
-static int testCompareXMLToXMLHelper(const void *data) {
-    char xml[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/interfaceschemadata/%s.xml",
-             abs_srcdir, (const char*)data);
-    return testCompareXMLToXMLFiles(xml);
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
+    char *xml = NULL;
+
+    if (virAsprintf(&xml, "%s/interfaceschemadata/%s.xml",
+                    abs_srcdir, (const char*)data) < 0)
+        return -1;
+
+    result = testCompareXMLToXMLFiles(xml);
+
+    free (xml);
+    return result;
 }
 
 
@@ -60,7 +70,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/networkxml2xmltest.c b/tests/networkxml2xmltest.c
index 7805548..6faeab2 100644
--- a/tests/networkxml2xmltest.c
+++ b/tests/networkxml2xmltest.c
@@ -14,23 +14,21 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
-    char inXmlData[MAX_FILE];
-    char *inXmlPtr = &(inXmlData[0]);
-    char outXmlData[MAX_FILE];
-    char *outXmlPtr = &(outXmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
+{
+    char *inXmlData = NULL;
+    char *outXmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virNetworkDefPtr dev = NULL;
 
-    if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(inxml, &inXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
     if (!(dev = virNetworkDefParseString(inXmlData)))
@@ -47,27 +45,40 @@ static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
     ret = 0;
 
  fail:
+    free(inXmlData);
+    free(outXmlData);
     free(actual);
     virNetworkDefFree(dev);
     return ret;
 }
 
-static int testCompareXMLToXMLHelper(const void *data) {
-    char inxml[PATH_MAX];
-    char outxml[PATH_MAX];
-    snprintf(inxml, PATH_MAX, "%s/networkxml2xmlin/%s.xml",
-             abs_srcdir, (const char*)data);
-    snprintf(outxml, PATH_MAX, "%s/networkxml2xmlout/%s.xml",
-             abs_srcdir, (const char*)data);
-    return testCompareXMLToXMLFiles(inxml, outxml);
-}
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
+    char *inxml = NULL;
+    char *outxml = NULL;
+
+    if (virAsprintf(&inxml, "%s/networkxml2xmlin/%s.xml",
+                    abs_srcdir, (const char*)data) < 0 ||
+        virAsprintf(&outxml, "%s/networkxml2xmlout/%s.xml",
+                    abs_srcdir, (const char*)data) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareXMLToXMLFiles(inxml, outxml);
 
+cleanup:
+    free(inxml);
+    free(outxml);
+
+    return result;
+}
 
 static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/nodedevxml2xmltest.c b/tests/nodedevxml2xmltest.c
index 2bc6743..e58883b 100644
--- a/tests/nodedevxml2xmltest.c
+++ b/tests/nodedevxml2xmltest.c
@@ -14,19 +14,18 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *xml) {
-    char xmlData[MAX_FILE];
-    char *xmlPtr = &(xmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *xml)
+{
+    char *xmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virNodeDeviceDefPtr dev = NULL;
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &xmlData) < 0)
         goto fail;
 
     if (!(dev = virNodeDeviceDefParseString(xmlData, EXISTING_DEVICE)))
@@ -43,16 +42,26 @@ static int testCompareXMLToXMLFiles(const char *xml) {
     ret = 0;
 
  fail:
+    free(xmlData);
     free(actual);
     virNodeDeviceDefFree(dev);
     return ret;
 }
 
-static int testCompareXMLToXMLHelper(const void *data) {
-    char xml[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/nodedevschemadata/%s.xml",
-             abs_srcdir, (const char*)data);
-    return testCompareXMLToXMLFiles(xml);
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
+    char *xml = NULL;
+
+    if (virAsprintf(&xml, "%s/nodedevschemadata/%s.xml",
+                    abs_srcdir, (const char*)data) < 0)
+        return -1;
+
+    result = testCompareXMLToXMLFiles(xml);
+
+    free(xml);
+    return result;
 }
 
 
@@ -60,7 +69,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
index c690403..0d8c13b 100644
--- a/tests/nodeinfotest.c
+++ b/tests/nodeinfotest.c
@@ -22,26 +22,27 @@ mymain(int argc ATTRIBUTE_UNUSED, char **argv ATTRIBUTE_UNUSED)
 #else
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-# define MAX_FILE 4096
-
 extern int linuxNodeInfoCPUPopulate(FILE *cpuinfo, virNodeInfoPtr nodeinfo,
                                     bool need_hyperthreads);
 
-static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile) {
-    char actualData[MAX_FILE];
-    char expectData[MAX_FILE];
-    char *expect = &expectData[0];
+static int
+linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile)
+{
+    int ret = -1;
+    char *actualData = NULL;
+    char *expectData = NULL;
     virNodeInfo nodeinfo;
     FILE *cpuinfo;
 
-    if (virtTestLoadFile(outputfile, &expect, MAX_FILE) < 0)
-        return -1;
+    if (virtTestLoadFile(outputfile, &expectData) < 0)
+        goto fail;
 
     cpuinfo = fopen(cpuinfofile, "r");
     if (!cpuinfo)
-        return -1;
+        goto fail;
 
     memset(&nodeinfo, 0, sizeof(nodeinfo));
     if (linuxNodeInfoCPUPopulate(cpuinfo, &nodeinfo, false) < 0) {
@@ -52,7 +53,7 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
             virFreeError(error);
         }
         VIR_FORCE_FCLOSE(cpuinfo);
-        return -1;
+        goto fail;
     }
     VIR_FORCE_FCLOSE(cpuinfo);
 
@@ -61,30 +62,49 @@ static int linuxTestCompareFiles(const char *cpuinfofile, const char *outputfile
      * so blank it to a predictable value */
     nodeinfo.nodes = 1;
 
-    snprintf(actualData, MAX_FILE,
-             "CPUs: %u, MHz: %u, Nodes: %u, Cores: %u\n",
-             nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes, nodeinfo.cores);
+    if (virAsprintf(&actualData, "CPUs: %u, MHz: %u, Nodes: %u, Cores: %u\n",
+                    nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes,
+                    nodeinfo.cores) < 0)
+        goto fail;
 
     if (STRNEQ(actualData, expectData)) {
         if (getenv("DEBUG_TESTS")) {
             printf("Expect %d '%s'\n", (int)strlen(expectData), expectData);
             printf("Actual %d '%s'\n", (int)strlen(actualData), actualData);
         }
-        return -1;
+        goto fail;
     }
 
-    return 0;
+    ret = 0;
+
+fail:
+    free(expectData);
+    free(actualData);
+    return ret;
 }
 
 
-static int linuxTestNodeInfo(const void *data) {
-    char cpuinfo[PATH_MAX];
-    char output[PATH_MAX];
-    snprintf(cpuinfo, PATH_MAX, "%s/nodeinfodata/linux-%s.cpuinfo",
-             abs_srcdir, (const char*)data);
-    snprintf(output, PATH_MAX, "%s/nodeinfodata/linux-%s.txt",
-             abs_srcdir, (const char*)data);
-    return linuxTestCompareFiles(cpuinfo, output);
+static int
+linuxTestNodeInfo(const void *data)
+{
+    int result = -1;
+    char *cpuinfo = NULL;
+    char *output = NULL;
+
+    if (virAsprintf(&cpuinfo, "%s/nodeinfodata/linux-%s.cpuinfo",
+                    abs_srcdir, (const char*)data) < 0 ||
+        virAsprintf(&output, "%s/nodeinfodata/linux-%s.txt",
+                    abs_srcdir, (const char*)data) < 0) {
+        goto cleanup;
+    }
+
+    result = linuxTestCompareFiles(cpuinfo, output);
+
+cleanup:
+    free(cpuinfo);
+    free(output);
+
+    return result;
 }
 
 
@@ -101,7 +121,6 @@ mymain(int argc, char **argv)
         "nodeinfo-5",
         "nodeinfo-6",
     };
-    char cwd[PATH_MAX];
 
     abs_srcdir = getenv("abs_srcdir");
     if (!abs_srcdir)
diff --git a/tests/nwfilterxml2xmltest.c b/tests/nwfilterxml2xmltest.c
index 575177a..0463a79 100644
--- a/tests/nwfilterxml2xmltest.c
+++ b/tests/nwfilterxml2xmltest.c
@@ -17,25 +17,22 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *inxml,
-                                    const char *outxml,
-                                    bool expect_error) {
-    char inXmlData[MAX_FILE];
-    char *inXmlPtr = &(inXmlData[0]);
-    char outXmlData[MAX_FILE];
-    char *outXmlPtr = &(outXmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *inxml, const char *outxml,
+                         bool expect_error)
+{
+    char *inXmlData = NULL;
+    char *outXmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virNWFilterDefPtr dev = NULL;
 
-    if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(inxml, &inXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
     virResetLastError();
@@ -62,6 +59,8 @@ static int testCompareXMLToXMLFiles(const char *inxml,
     ret = 0;
 
  fail:
+    free(inXmlData);
+    free(outXmlData);
     free(actual);
     virNWFilterDefFree(dev);
     return ret;
@@ -72,23 +71,34 @@ typedef struct test_parms {
     bool expect_warning;
 } test_parms;
 
-static int testCompareXMLToXMLHelper(const void *data) {
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
     const test_parms *tp = data;
-    char inxml[PATH_MAX];
-    char outxml[PATH_MAX];
-    snprintf(inxml, PATH_MAX, "%s/nwfilterxml2xmlin/%s.xml",
-             abs_srcdir, tp->name);
-    snprintf(outxml, PATH_MAX, "%s/nwfilterxml2xmlout/%s.xml",
-             abs_srcdir, tp->name);
-    return testCompareXMLToXMLFiles(inxml, outxml, tp->expect_warning);
-}
+    char *inxml = NULL;
+    char *outxml = NULL;
+
+    if (virAsprintf(&inxml, "%s/nwfilterxml2xmlin/%s.xml",
+                    abs_srcdir, tp->name) < 0 ||
+        virAsprintf(&outxml, "%s/nwfilterxml2xmlout/%s.xml",
+                    abs_srcdir, tp->name) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareXMLToXMLFiles(inxml, outxml, tp->expect_warning);
 
+cleanup:
+    free(inxml);
+    free(outxml);
+
+    return result;
+}
 
 static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/qemuargv2xmltest.c b/tests/qemuargv2xmltest.c
index 0214db0..47e452e 100644
--- a/tests/qemuargv2xmltest.c
+++ b/tests/qemuargv2xmltest.c
@@ -17,11 +17,10 @@
 # include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static struct qemud_driver driver;
 
-# define MAX_FILE 4096
-
 static int blankProblemElements(char *data)
 {
     if (virtTestClearLineRegex("<name>[[:alnum:]]+</name>", data) < 0 ||
@@ -37,18 +36,16 @@ static int blankProblemElements(char *data)
 static int testCompareXMLToArgvFiles(const char *xml,
                                      const char *cmdfile,
                                      bool expect_warning) {
-    char xmlData[MAX_FILE];
-    char cmdData[MAX_FILE];
-    char *expectxml = &(xmlData[0]);
+    char *expectxml = NULL;
     char *actualxml = NULL;
-    char *cmd = &(cmdData[0]);
+    char *cmd = NULL;
     int ret = -1;
     virDomainDefPtr vmdef = NULL;
     char *log;
 
-    if (virtTestLoadFile(cmdfile, &cmd, MAX_FILE) < 0)
+    if (virtTestLoadFile(cmdfile, &cmd) < 0)
         goto fail;
-    if (virtTestLoadFile(xml, &expectxml, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &expectxml) < 0)
         goto fail;
 
     if (!(vmdef = qemuParseCommandLineString(driver.caps, cmd)))
@@ -77,7 +74,9 @@ static int testCompareXMLToArgvFiles(const char *xml,
     ret = 0;
 
  fail:
+    free(expectxml);
     free(actualxml);
+    free(cmd);
     virDomainDefFree(vmdef);
     return ret;
 }
@@ -89,15 +88,26 @@ struct testInfo {
     const char *migrateFrom;
 };
 
-static int testCompareXMLToArgvHelper(const void *data) {
+static int
+testCompareXMLToArgvHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char args[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
-             abs_srcdir, info->name);
-    snprintf(args, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
-             abs_srcdir, info->name);
-    return testCompareXMLToArgvFiles(xml, args, !!info->extraFlags);
+    char *xml = NULL;
+    char *args = NULL;
+
+    if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
+                    abs_srcdir, info->name) < 0 ||
+        virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
+                    abs_srcdir, info->name) < 0)
+        goto cleanup;
+
+    result = testCompareXMLToArgvFiles(xml, args, !!info->extraFlags);
+
+cleanup:
+    free(xml);
+    free(args);
+    return result;
 }
 
 
@@ -106,7 +116,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/qemuhelptest.c b/tests/qemuhelptest.c
index c86c578..4838e9a 100644
--- a/tests/qemuhelptest.c
+++ b/tests/qemuhelptest.c
@@ -9,8 +9,6 @@
 # include "qemu/qemu_capabilities.h"
 # include "memory.h"
 
-# define MAX_HELP_OUTPUT_SIZE 1024*64
-
 struct testInfo {
     const char *name;
     virBitmapPtr flags;
@@ -20,6 +18,7 @@ struct testInfo {
 };
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
 static void printMismatchedFlags(virBitmapPtr got,
@@ -41,8 +40,7 @@ static int testHelpStrParsing(const void *data)
 {
     const struct testInfo *info = data;
     char *path = NULL;
-    char helpStr[MAX_HELP_OUTPUT_SIZE];
-    char *help = &(helpStr[0]);
+    char *help = NULL;
     unsigned int version, is_kvm, kvm_version;
     virBitmapPtr flags = NULL;
     int ret = -1;
@@ -52,7 +50,7 @@ static int testHelpStrParsing(const void *data)
     if (virAsprintf(&path, "%s/qemuhelpdata/%s", abs_srcdir, info->name) < 0)
         return -1;
 
-    if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
+    if (virtTestLoadFile(path, &help) < 0)
         goto cleanup;
 
     if (!(flags = qemuCapsNew()))
@@ -64,11 +62,12 @@ static int testHelpStrParsing(const void *data)
 
     if (qemuCapsGet(info->flags, QEMU_CAPS_DEVICE)) {
         VIR_FREE(path);
+        VIR_FREE(help);
         if (virAsprintf(&path, "%s/qemuhelpdata/%s-device", abs_srcdir,
                         info->name) < 0)
             goto cleanup;
 
-        if (virtTestLoadFile(path, &help, MAX_HELP_OUTPUT_SIZE) < 0)
+        if (virtTestLoadFile(path, &help) < 0)
             goto cleanup;
 
         if (qemuCapsParseDeviceStr(help, flags) < 0)
@@ -114,6 +113,7 @@ static int testHelpStrParsing(const void *data)
     ret = 0;
 cleanup:
     VIR_FREE(path);
+    VIR_FREE(help);
     qemuCapsFree(flags);
     VIR_FREE(got);
     VIR_FREE(expected);
@@ -124,7 +124,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
index c06bdf6..023f5df 100644
--- a/tests/qemuxml2argvtest.c
+++ b/tests/qemuxml2argvtest.c
@@ -20,20 +20,19 @@
 # include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static const char *abs_top_srcdir;
 static struct qemud_driver driver;
 
-# define MAX_FILE 4096
-
 static int testCompareXMLToArgvFiles(const char *xml,
                                      const char *cmdline,
                                      virBitmapPtr extraFlags,
                                      const char *migrateFrom,
                                      int migrateFd,
-                                     bool expectError) {
-    char argvData[MAX_FILE];
-    char *expectargv = &(argvData[0]);
+                                     bool expectError)
+{
+    char *expectargv = NULL;
     int len;
     char *actualargv = NULL;
     int ret = -1;
@@ -47,7 +46,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
     if (!(conn = virGetConnect()))
         goto fail;
 
-    len = virtTestLoadFile(cmdline, &expectargv, MAX_FILE);
+    len = virtTestLoadFile(cmdline, &expectargv);
     if (len < 0)
         goto fail;
     if (len && expectargv[len - 1] == '\n')
@@ -158,6 +157,7 @@ static int testCompareXMLToArgvFiles(const char *xml,
  fail:
     free(log);
     free(emulator);
+    free(expectargv);
     free(actualargv);
     virCommandFree(cmd);
     virDomainDefFree(vmdef);
@@ -174,17 +174,28 @@ struct testInfo {
     bool expectError;
 };
 
-static int testCompareXMLToArgvHelper(const void *data) {
+static int
+testCompareXMLToArgvHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char args[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
-             abs_srcdir, info->name);
-    snprintf(args, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
-             abs_srcdir, info->name);
-    return testCompareXMLToArgvFiles(xml, args, info->extraFlags,
-                                     info->migrateFrom, info->migrateFd,
-                                     info->expectError);
+    char *xml = NULL;
+    char *args = NULL;
+
+    if (virAsprintf(&xml, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
+                    abs_srcdir, info->name) < 0 ||
+        virAsprintf(&args, "%s/qemuxml2argvdata/qemuxml2argv-%s.args",
+                    abs_srcdir, info->name) < 0)
+        goto cleanup;
+
+    result = testCompareXMLToArgvFiles(xml, args, info->extraFlags,
+                                      info->migrateFrom, info->migrateFd,
+                                      info->expectError);
+
+cleanup:
+    free(xml);
+    free(args);
+    return result;
 }
 
 
@@ -193,14 +204,13 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
-    char map[PATH_MAX];
+    char *map = NULL;
 
     progname = argv[0];
 
     if (argc > 1) {
         fprintf(stderr, "Usage: %s\n", progname);
-        return (EXIT_FAILURE);
+        return EXIT_FAILURE;
     }
 
     abs_srcdir = getenv("abs_srcdir");
@@ -224,10 +234,11 @@ mymain(int argc, char **argv)
         return EXIT_FAILURE;
     if (!(driver.spicePassword = strdup("123456")))
         return EXIT_FAILURE;
-
-    snprintf(map, PATH_MAX, "%s/src/cpu/cpu_map.xml", abs_top_srcdir);
-    if (cpuMapOverride(map) < 0)
+    if (virAsprintf(&map, "%s/src/cpu/cpu_map.xml", abs_top_srcdir) < 0 ||
+        cpuMapOverride(map) < 0) {
+        free(map);
         return EXIT_FAILURE;
+    }
 
 # define DO_TEST_FULL(name, migrateFrom, migrateFd, expectError, ...)   \
     do {                                                                \
@@ -498,6 +509,7 @@ mymain(int argc, char **argv)
 
     free(driver.stateDir);
     virCapabilitiesFree(driver.caps);
+    free(map);
 
     return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c
index 27330a9..9d8beeb 100644
--- a/tests/qemuxml2xmltest.c
+++ b/tests/qemuxml2xmltest.c
@@ -16,24 +16,22 @@
 # include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static struct qemud_driver driver;
 
-# define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
-    char inXmlData[MAX_FILE];
-    char *inXmlPtr = &(inXmlData[0]);
-    char outXmlData[MAX_FILE];
-    char *outXmlPtr = &(outXmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
+{
+    char *inXmlData = NULL;
+    char *outXmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virDomainDefPtr def = NULL;
 
-    if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(inxml, &inXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
     if (!(def = virDomainDefParseString(driver.caps, inXmlData,
@@ -51,6 +49,8 @@ static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
 
     ret = 0;
  fail:
+    free(inXmlData);
+    free(outXmlData);
     free(actual);
     virDomainDefFree(def);
     return ret;
@@ -61,16 +61,19 @@ struct testInfo {
     int different;
 };
 
-static int testCompareXMLToXMLHelper(const void *data) {
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
     const struct testInfo *info = data;
-    char xml_in[PATH_MAX];
-    char xml_out[PATH_MAX];
-    int ret;
+    char *xml_in = NULL;
+    char *xml_out = NULL;
+    int ret = -1;
 
-    snprintf(xml_in, PATH_MAX, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
-             abs_srcdir, info->name);
-    snprintf(xml_out, PATH_MAX, "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
-             abs_srcdir, info->name);
+    if (virAsprintf(&xml_in, "%s/qemuxml2argvdata/qemuxml2argv-%s.xml",
+                    abs_srcdir, info->name) < 0 ||
+        virAsprintf(&xml_out, "%s/qemuxml2xmloutdata/qemuxml2xmlout-%s.xml",
+                    abs_srcdir, info->name) < 0)
+        goto cleanup;
 
     if (info->different) {
         ret = testCompareXMLToXMLFiles(xml_in, xml_out);
@@ -78,6 +81,9 @@ static int testCompareXMLToXMLHelper(const void *data) {
         ret = testCompareXMLToXMLFiles(xml_in, xml_in);
     }
 
+cleanup:
+    free(xml_in);
+    free(xml_out);
     return ret;
 }
 
@@ -86,7 +92,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/sexpr2xmltest.c b/tests/sexpr2xmltest.c
index 9f74ece..4df0fd5 100644
--- a/tests/sexpr2xmltest.c
+++ b/tests/sexpr2xmltest.c
@@ -14,18 +14,16 @@
 #include "testutilsxen.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static virCapsPtr caps;
 
-#define MAX_FILE 4096
-
-static int testCompareFiles(const char *xml, const char *sexpr,
-                            int xendConfigVersion) {
-  char xmlData[MAX_FILE];
-  char sexprData[MAX_FILE];
+static int
+testCompareFiles(const char *xml, const char *sexpr, int xendConfigVersion)
+{
+  char *xmlData = NULL;
+  char *sexprData = NULL;
   char *gotxml = NULL;
-  char *xmlPtr = &(xmlData[0]);
-  char *sexprPtr = &(sexprData[0]);
   int id;
   char * tty;
   int vncport;
@@ -38,10 +36,10 @@ static int testCompareFiles(const char *xml, const char *sexpr,
   conn = virGetConnect();
   if (!conn) goto fail;
 
-  if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+  if (virtTestLoadFile(xml, &xmlData) < 0)
       goto fail;
 
-  if (virtTestLoadFile(sexpr, &sexprPtr, MAX_FILE) < 0)
+  if (virtTestLoadFile(sexpr, &sexprData) < 0)
       goto fail;
 
   memset(&priv, 0, sizeof priv);
@@ -72,6 +70,8 @@ static int testCompareFiles(const char *xml, const char *sexpr,
   ret = 0;
 
  fail:
+  free(xmlData);
+  free(sexprData);
   free(gotxml);
   virDomainDefFree(def);
   if (conn)
@@ -86,23 +86,34 @@ struct testInfo {
     int version;
 };
 
-static int testCompareHelper(const void *data) {
+static int
+testCompareHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char args[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/sexpr2xmldata/sexpr2xml-%s.xml",
-             abs_srcdir, info->input);
-    snprintf(args, PATH_MAX, "%s/sexpr2xmldata/sexpr2xml-%s.sexpr",
-             abs_srcdir, info->output);
-    return testCompareFiles(xml, args, info->version);
-}
+    char *xml = NULL;
+    char *args = NULL;
+
+    if (virAsprintf(&xml, "%s/sexpr2xmldata/sexpr2xml-%s.xml",
+                    abs_srcdir, info->input) < 0 ||
+        virAsprintf(&args, "%s/sexpr2xmldata/sexpr2xml-%s.sexpr",
+                    abs_srcdir, info->output) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareFiles(xml, args, info->version);
 
+cleanup:
+    free(xml);
+    free(args);
+
+    return result;
+}
 
 static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/storagepoolxml2xmltest.c b/tests/storagepoolxml2xmltest.c
index 2ec29e3..e947100 100644
--- a/tests/storagepoolxml2xmltest.c
+++ b/tests/storagepoolxml2xmltest.c
@@ -14,23 +14,21 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
-    char inXmlData[MAX_FILE];
-    char *inXmlPtr = &(inXmlData[0]);
-    char outXmlData[MAX_FILE];
-    char *outXmlPtr = &(outXmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *inxml, const char *outxml)
+{
+    char *inXmlData = NULL;
+    char *outXmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virStoragePoolDefPtr dev = NULL;
 
-    if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(inxml, &inXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
     if (!(dev = virStoragePoolDefParseString(inXmlData)))
@@ -47,27 +45,40 @@ static int testCompareXMLToXMLFiles(const char *inxml, const char *outxml) {
     ret = 0;
 
  fail:
+    free(inXmlData);
+    free(outXmlData);
     free(actual);
     virStoragePoolDefFree(dev);
     return ret;
 }
 
-static int testCompareXMLToXMLHelper(const void *data) {
-    char inxml[PATH_MAX];
-    char outxml[PATH_MAX];
-    snprintf(inxml, PATH_MAX, "%s/storagepoolxml2xmlin/%s.xml",
-             abs_srcdir, (const char*)data);
-    snprintf(outxml, PATH_MAX, "%s/storagepoolxml2xmlout/%s.xml",
-             abs_srcdir, (const char*)data);
-    return testCompareXMLToXMLFiles(inxml, outxml);
-}
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
+    char *inxml = NULL;
+    char *outxml = NULL;
+
+    if (virAsprintf(&inxml, "%s/storagepoolxml2xmlin/%s.xml",
+                    abs_srcdir, (const char*)data) < 0 ||
+        virAsprintf(&outxml, "%s/storagepoolxml2xmlout/%s.xml",
+                    abs_srcdir, (const char*)data) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareXMLToXMLFiles(inxml, outxml);
 
+cleanup:
+    free(inxml);
+    free(outxml);
+
+    return result;
+}
 
 static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/storagevolxml2xmltest.c b/tests/storagevolxml2xmltest.c
index ffa5dfe..c57b7a8 100644
--- a/tests/storagevolxml2xmltest.c
+++ b/tests/storagevolxml2xmltest.c
@@ -14,30 +14,26 @@
 #include "testutilsqemu.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-
-static int testCompareXMLToXMLFiles(const char *poolxml,
-                                    const char *inxml,
-                                    const char *outxml) {
-    char poolXmlData[MAX_FILE];
-    char *poolXmlPtr = &(poolXmlData[0]);
-    char inXmlData[MAX_FILE];
-    char *inXmlPtr = &(inXmlData[0]);
-    char outXmlData[MAX_FILE];
-    char *outXmlPtr = &(outXmlData[0]);
+static int
+testCompareXMLToXMLFiles(const char *poolxml, const char *inxml,
+                         const char *outxml)
+{
+    char *poolXmlData = NULL;
+    char *inXmlData = NULL;
+    char *outXmlData = NULL;
     char *actual = NULL;
     int ret = -1;
     virStoragePoolDefPtr pool = NULL;
     virStorageVolDefPtr dev = NULL;
 
-    if (virtTestLoadFile(poolxml, &poolXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(poolxml, &poolXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(inxml, &inXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(inxml, &inXmlData) < 0)
         goto fail;
-    if (virtTestLoadFile(outxml, &outXmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(outxml, &outXmlData) < 0)
         goto fail;
 
     if (!(pool = virStoragePoolDefParseString(poolXmlData)))
@@ -57,6 +53,9 @@ static int testCompareXMLToXMLFiles(const char *poolxml,
     ret = 0;
 
  fail:
+    free(poolXmlData);
+    free(inXmlData);
+    free(outXmlData);
     free(actual);
     virStoragePoolDefFree(pool);
     virStorageVolDefFree(dev);
@@ -68,19 +67,32 @@ struct testInfo {
     const char *name;
 };
 
-static int testCompareXMLToXMLHelper(const void *data) {
-    char poolxml[PATH_MAX];
-    char inxml[PATH_MAX];
-    char outxml[PATH_MAX];
+static int
+testCompareXMLToXMLHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
+    char *poolxml = NULL;
+    char *inxml = NULL;
+    char *outxml = NULL;
+
+    if (virAsprintf(&poolxml, "%s/storagepoolxml2xmlin/%s.xml",
+                    abs_srcdir, info->pool) < 0 ||
+        virAsprintf(&inxml, "%s/storagevolxml2xmlin/%s.xml",
+                    abs_srcdir, info->name) < 0 ||
+        virAsprintf(&outxml, "%s/storagevolxml2xmlout/%s.xml",
+                    abs_srcdir, info->name) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareXMLToXMLFiles(poolxml, inxml, outxml);
+
+cleanup:
+    free(poolxml);
+    free(inxml);
+    free(outxml);
 
-    snprintf(poolxml, PATH_MAX, "%s/storagepoolxml2xmlin/%s.xml",
-             abs_srcdir, (const char*)info->pool);
-    snprintf(inxml, PATH_MAX, "%s/storagevolxml2xmlin/%s.xml",
-             abs_srcdir, (const char*)info->name);
-    snprintf(outxml, PATH_MAX, "%s/storagevolxml2xmlout/%s.xml",
-             abs_srcdir, (const char*)info->name);
-    return testCompareXMLToXMLFiles(poolxml, inxml, outxml);
+    return result;
 }
 
 
@@ -88,7 +100,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/testutils.c b/tests/testutils.c
index 1f3b569..aaee337 100644
--- a/tests/testutils.c
+++ b/tests/testutils.c
@@ -170,17 +170,16 @@ virtTestRun(const char *title, int nloops, int (*body)(const void *data), const
     return ret;
 }
 
-/* Read FILE into buffer BUF of length BUFLEN.
-   Upon any failure, or if FILE appears to contain more than BUFLEN bytes,
-   diagnose it and return -1, but don't bother trying to preserve errno.
-   Otherwise, return the number of bytes copied into BUF. */
-int virtTestLoadFile(const char *file,
-                     char **buf,
-                     int buflen) {
+/* Allocate BUF to the size of FILE. Read FILE into buffer BUF.
+   Upon any failure, diagnose it and return -1, but don't bother trying
+   to preserve errno. Otherwise, return the number of bytes copied into BUF. */
+int
+virtTestLoadFile(const char *file, char **buf)
+{
     FILE *fp = fopen(file, "r");
     struct stat st;
-    char *tmp = *buf;
-    int len, tmplen = buflen;
+    char *tmp;
+    int len, tmplen, buflen;
 
     if (!fp) {
         fprintf (stderr, "%s: failed to open: %s\n", file, strerror(errno));
@@ -193,17 +192,23 @@ int virtTestLoadFile(const char *file,
         return -1;
     }
 
-    if (st.st_size > (buflen-1)) {
-        fprintf (stderr, "%s: larger than buffer (> %d)\n", file, buflen-1);
+    tmplen = buflen = st.st_size + 1;
+
+    if (VIR_ALLOC_N(*buf, buflen) < 0) {
+        fprintf (stderr, "%s: larger than available memory (> %d)\n", file, buflen);
         VIR_FORCE_FCLOSE(fp);
         return -1;
     }
 
+    tmp = *buf;
     (*buf)[0] = '\0';
     if (st.st_size) {
         /* read the file line by line */
         while (fgets(tmp, tmplen, fp) != NULL) {
             len = strlen(tmp);
+            /* stop on an empty line */
+            if (len == 0)
+                break;
             /* remove trailing backslash-newline pair */
             if (len >= 2 && tmp[len-2] == '\\' && tmp[len-1] == '\n') {
                 len -= 2;
@@ -216,6 +221,7 @@ int virtTestLoadFile(const char *file,
         if (ferror(fp)) {
             fprintf (stderr, "%s: read failed: %s\n", file, strerror(errno));
             VIR_FORCE_FCLOSE(fp);
+            free(*buf);
             return -1;
         }
     }
@@ -265,10 +271,11 @@ void virtTestCaptureProgramExecChild(const char *const argv[],
     VIR_FORCE_CLOSE(stdinfd);
 }
 
-int virtTestCaptureProgramOutput(const char *const argv[],
-                                 char **buf,
-                                 int buflen) {
+int
+virtTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen)
+{
     int pipefd[2];
+    int len;
 
     if (pipe(pipefd) < 0)
         return -1;
@@ -286,34 +293,20 @@ int virtTestCaptureProgramOutput(const char *const argv[],
         return -1;
 
     default:
-        {
-            int got = 0;
-            int ret = -1;
-            int want = buflen-1;
-
-            VIR_FORCE_CLOSE(pipefd[1]);
-
-            while (want) {
-                if ((ret = read(pipefd[0], (*buf)+got, want)) <= 0)
-                    break;
-                got += ret;
-                want -= ret;
-            }
-            VIR_FORCE_CLOSE(pipefd[0]);
-
-            if (!ret)
-                (*buf)[got] = '\0';
-
-            waitpid(pid, NULL, 0);
+        VIR_FORCE_CLOSE(pipefd[1]);
+        len = virFileReadLimFD(pipefd[0], maxlen, buf);
+        VIR_FORCE_CLOSE(pipefd[0]);
+        waitpid(pid, NULL, 0);
 
-            return ret;
-        }
+        return len;
     }
 }
 #else /* !WIN32 */
-int virtTestCaptureProgramOutput(const char *const argv[] ATTRIBUTE_UNUSED,
-                                 char **buf ATTRIBUTE_UNUSED,
-                                 int buflen ATTRIBUTE_UNUSED) {
+int
+virtTestCaptureProgramOutput(const char *const argv[] ATTRIBUTE_UNUSED,
+                             char **buf ATTRIBUTE_UNUSED,
+                             int maxlen ATTRIBUTE_UNUSED)
+{
     return -1;
 }
 #endif /* !WIN32 */
diff --git a/tests/testutils.h b/tests/testutils.h
index 88603a1..6adc0a0 100644
--- a/tests/testutils.h
+++ b/tests/testutils.h
@@ -23,12 +23,8 @@ int virtTestRun(const char *title,
                 int nloops,
                 int (*body)(const void *data),
                 const void *data);
-int virtTestLoadFile(const char *name,
-                     char **buf,
-                     int buflen);
-int virtTestCaptureProgramOutput(const char *const argv[],
-                                 char **buf,
-                                 int buflen);
+int virtTestLoadFile(const char *file, char **buf);
+int virtTestCaptureProgramOutput(const char *const argv[], char **buf, int maxlen);
 
 int virtTestClearLineRegex(const char *pattern,
                            char *string);
diff --git a/tests/virshtest.c b/tests/virshtest.c
index 8ec97a8..e6743d7 100644
--- a/tests/virshtest.c
+++ b/tests/virshtest.c
@@ -6,11 +6,12 @@
 
 #include "internal.h"
 #include "xml.h"
+#include "util.h"
 #include "testutils.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
-#define MAX_FILE 4096
 
 #define DOM_UUID "ef861801-45b9-11cb-88e3-afbfe5370493"
 
@@ -47,41 +48,31 @@ static int testFilterLine(char *buffer,
   return 0;
 }
 
-static int testCompareOutputLit(const char *expectData,
-                                const char *filter, const char *const argv[]) {
-  char actualData[MAX_FILE];
-  char *actualPtr = &(actualData[0]);
-
-  if (virtTestCaptureProgramOutput(argv, &actualPtr, MAX_FILE) < 0)
-    return -1;
-
-  if (filter)
-    if (testFilterLine(actualData, filter) < 0)
-      return -1;
+static int
+testCompareOutputLit(const char *expectData,
+                     const char *filter, const char *const argv[])
+{
+    int result = -1;
+    char *actualData = NULL;
 
-  if (STRNEQ(expectData, actualData)) {
-      virtTestDifference(stderr, expectData, actualData);
-      return -1;
-  }
+    if (virtTestCaptureProgramOutput(argv, &actualData, 4096) < 0)
+        goto cleanup;
 
-  return 0;
-}
+    if (filter && testFilterLine(actualData, filter) < 0)
+        goto cleanup;
 
-#if unused
-static int testCompareOutput(const char *expect_rel, const char *filter,
-                             const char *const argv[]) {
-  char expectData[MAX_FILE];
-  char *expectPtr = &(expectData[0]);
-  char expect[PATH_MAX];
+    if (STRNEQ(expectData, actualData)) {
+        virtTestDifference(stderr, expectData, actualData);
+        goto cleanup;
+    }
 
-  snprintf(expect, sizeof expect - 1, "%s/%s", abs_srcdir, expect_rel);
+    result = 0;
 
-  if (virtTestLoadFile(expect, &expectPtr, MAX_FILE) < 0)
-    return -1;
+cleanup:
+    free(actualData);
 
-  return testCompareOutputLit(expectData, filter, argv);
+    return result;
 }
-#endif
 
 #define VIRSH_DEFAULT     "../tools/virsh", \
     "--connect", \
@@ -235,8 +226,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char buffer[PATH_MAX];
-    char cwd[PATH_MAX];
 
     abs_srcdir = getenv("abs_srcdir");
     if (!abs_srcdir)
@@ -246,16 +235,17 @@ mymain(int argc, char **argv)
     exit (EXIT_AM_SKIP);
 #endif
 
-    snprintf(buffer, PATH_MAX-1, "test://%s/../examples/xml/test/testnode.xml", abs_srcdir);
-    buffer[PATH_MAX-1] = '\0';
-    progname = argv[0];
-    custom_uri = buffer;
-
     if (argc > 1) {
         fprintf(stderr, "Usage: %s\n", progname);
-        return(EXIT_FAILURE);
+        return EXIT_FAILURE;
     }
 
+    if (virAsprintf(&custom_uri, "test://%s/../examples/xml/test/testnode.xml",
+                    abs_srcdir) < 0)
+        return EXIT_FAILURE;
+
+    progname = argv[0];
+
     if (virtTestRun("virsh list (default)",
                     1, testCompareListDefault, NULL) != 0)
         ret = -1;
@@ -406,6 +396,7 @@ mymain(int argc, char **argv)
 
 #undef DO_TEST
 
+    free(custom_uri);
     return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 
diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c
index 5fed1c4..53d66c5 100644
--- a/tests/vmx2xmltest.c
+++ b/tests/vmx2xmltest.c
@@ -11,13 +11,12 @@
 # include "testutils.h"
 # include "vmx/vmx.h"
 
-static char *progname = NULL;
-static char *abs_srcdir = NULL;
-static virCapsPtr caps = NULL;
+static char *progname;
+static char cwd[PATH_MAX];
+static char *abs_srcdir;
+static virCapsPtr caps;
 static virVMXContext ctx;
 
-# define MAX_FILE 4096
-
 static void
 testCapsInit(void)
 {
@@ -71,19 +70,17 @@ static int
 testCompareFiles(const char *vmx, const char *xml)
 {
     int result = -1;
-    char vmxData[MAX_FILE];
-    char xmlData[MAX_FILE];
+    char *vmxData = NULL;
+    char *xmlData = NULL;
     char *formatted = NULL;
-    char *vmxPtr = &(vmxData[0]);
-    char *xmlPtr = &(xmlData[0]);
     virDomainDefPtr def = NULL;
     virErrorPtr err = NULL;
 
-    if (virtTestLoadFile(vmx, &vmxPtr, MAX_FILE) < 0) {
+    if (virtTestLoadFile(vmx, &vmxData) < 0) {
         goto failure;
     }
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) {
+    if (virtTestLoadFile(xml, &xmlData) < 0) {
         goto failure;
     }
 
@@ -111,6 +108,8 @@ testCompareFiles(const char *vmx, const char *xml)
     result = 0;
 
   failure:
+    VIR_FREE(vmxData);
+    VIR_FREE(xmlData);
     VIR_FREE(formatted);
     virDomainDefFree(def);
 
@@ -125,16 +124,25 @@ struct testInfo {
 static int
 testCompareHelper(const void *data)
 {
+    int result = -1;
     const struct testInfo *info = data;
-    char vmx[PATH_MAX];
-    char xml[PATH_MAX];
+    char *vmx = NULL;
+    char *xml = NULL;
+
+    if (virAsprintf(&vmx, "%s/vmx2xmldata/vmx2xml-%s.vmx", abs_srcdir,
+                    info->input) < 0 ||
+        virAsprintf(&xml, "%s/vmx2xmldata/vmx2xml-%s.xml", abs_srcdir,
+                    info->output) < 0) {
+        goto cleanup;
+    }
 
-    snprintf(vmx, PATH_MAX, "%s/vmx2xmldata/vmx2xml-%s.vmx", abs_srcdir,
-             info->input);
-    snprintf(xml, PATH_MAX, "%s/vmx2xmldata/vmx2xml-%s.xml", abs_srcdir,
-             info->output);
+    result = testCompareFiles(vmx, xml);
 
-    return testCompareFiles(vmx, xml);
+  cleanup:
+    VIR_FREE(vmx);
+    VIR_FREE(xml);
+
+    return result;
 }
 
 static char *
@@ -184,7 +192,6 @@ static int
 mymain(int argc, char **argv)
 {
     int result = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/xencapstest.c b/tests/xencapstest.c
index 7b48812..a00b30b 100644
--- a/tests/xencapstest.c
+++ b/tests/xencapstest.c
@@ -12,34 +12,30 @@
 #include "files.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 
-#define MAX_FILE 4096
-
-static int testCompareFiles(const char *hostmachine,
-                            const char *xml_rel,
-                            const char *cpuinfo_rel,
-                            const char *capabilities_rel) {
-  char xmlData[MAX_FILE];
-  char *expectxml = &(xmlData[0]);
+static int
+testCompareFiles(const char *hostmachine, const char *xml_rel,
+                 const char *cpuinfo_rel, const char *capabilities_rel)
+{
+  char *expectxml = NULL;
   char *actualxml = NULL;
   FILE *fp1 = NULL, *fp2 = NULL;
   virCapsPtr caps = NULL;
 
   int ret = -1;
 
-  char xml[PATH_MAX];
-  char cpuinfo[PATH_MAX];
-  char capabilities[PATH_MAX];
+  char *xml = NULL;
+  char *cpuinfo = NULL;
+  char *capabilities = NULL;
 
-  snprintf(xml, sizeof xml - 1, "%s/%s",
-           abs_srcdir, xml_rel);
-  snprintf(cpuinfo, sizeof cpuinfo - 1, "%s/%s",
-           abs_srcdir, cpuinfo_rel);
-  snprintf(capabilities, sizeof capabilities - 1, "%s/%s",
-           abs_srcdir, capabilities_rel);
+  if (virAsprintf(&xml, "%s/%s", abs_srcdir, xml_rel) < 0 ||
+      virAsprintf(&cpuinfo, "%s/%s", abs_srcdir, cpuinfo_rel) < 0 ||
+      virAsprintf(&capabilities, "%s/%s", abs_srcdir, capabilities_rel) < 0)
+      goto fail;
 
-  if (virtTestLoadFile(xml, &expectxml, MAX_FILE) < 0)
+  if (virtTestLoadFile(xml, &expectxml) < 0)
       goto fail;
 
   if (!(fp1 = fopen(cpuinfo, "r")))
@@ -62,8 +58,11 @@ static int testCompareFiles(const char *hostmachine,
   ret = 0;
 
  fail:
-
+  free(expectxml);
   free(actualxml);
+  free(xml);
+  free(cpuinfo);
+  free(capabilities);
   VIR_FORCE_FCLOSE(fp1);
   VIR_FORCE_FCLOSE(fp2);
 
@@ -154,7 +153,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/xmconfigtest.c b/tests/xmconfigtest.c
index 7d418a5..41ea0c8 100644
--- a/tests/xmconfigtest.c
+++ b/tests/xmconfigtest.c
@@ -37,33 +37,33 @@
 #include "memory.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static virCapsPtr caps;
 
-#define MAX_FILE 4096
-
-static int testCompareParseXML(const char *xmcfg, const char *xml,
-                               int xendConfigVersion) {
-    char xmlData[MAX_FILE];
-    char xmcfgData[MAX_FILE];
-    char gotxmcfgData[MAX_FILE];
-    char *xmlPtr = &(xmlData[0]);
-    char *xmcfgPtr = &(xmcfgData[0]);
-    char *gotxmcfgPtr = &(gotxmcfgData[0]);
+static int
+testCompareParseXML(const char *xmcfg, const char *xml, int xendConfigVersion)
+{
+    char *xmlData = NULL;
+    char *xmcfgData = NULL;
+    char *gotxmcfgData = NULL;
     virConfPtr conf = NULL;
     int ret = -1;
     virConnectPtr conn;
-    int wrote = MAX_FILE;
+    int wrote = 4096;
     struct _xenUnifiedPrivate priv;
     virDomainDefPtr def = NULL;
 
+    if (VIR_ALLOC_N(gotxmcfgData, wrote) < 0)
+        goto fail;
+
     conn = virGetConnect();
     if (!conn) goto fail;
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &xmlData) < 0)
         goto fail;
 
-    if (virtTestLoadFile(xmcfg, &xmcfgPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xmcfg, &xmcfgData) < 0)
         goto fail;
 
     /* Many puppies died to bring you this code. */
@@ -71,16 +71,16 @@ static int testCompareParseXML(const char *xmcfg, const char *xml,
     priv.caps = caps;
     conn->privateData = &priv;
 
-    if (!(def = virDomainDefParseString(caps, xmlPtr,
+    if (!(def = virDomainDefParseString(caps, xmlData,
                                         VIR_DOMAIN_XML_INACTIVE)))
         goto fail;
 
     if (!(conf = xenFormatXM(conn, def, xendConfigVersion)))
         goto fail;
 
-    if (virConfWriteMem(gotxmcfgPtr, &wrote, conf) < 0)
+    if (virConfWriteMem(gotxmcfgData, &wrote, conf) < 0)
         goto fail;
-    gotxmcfgPtr[wrote] = '\0';
+    gotxmcfgData[wrote] = '\0';
 
     if (STRNEQ(xmcfgData, gotxmcfgData)) {
         virtTestDifference(stderr, xmcfgData, gotxmcfgData);
@@ -90,6 +90,9 @@ static int testCompareParseXML(const char *xmcfg, const char *xml,
     ret = 0;
 
  fail:
+    free(xmlData);
+    free(xmcfgData);
+    free(gotxmcfgData);
     if (conf)
         virConfFree(conf);
     virDomainDefFree(def);
@@ -98,12 +101,11 @@ static int testCompareParseXML(const char *xmcfg, const char *xml,
     return ret;
 }
 
-static int testCompareFormatXML(const char *xmcfg, const char *xml,
-                                int xendConfigVersion) {
-    char xmlData[MAX_FILE];
-    char xmcfgData[MAX_FILE];
-    char *xmlPtr = &(xmlData[0]);
-    char *xmcfgPtr = &(xmcfgData[0]);
+static int
+testCompareFormatXML(const char *xmcfg, const char *xml, int xendConfigVersion)
+{
+    char *xmlData = NULL;
+    char *xmcfgData = NULL;
     char *gotxml = NULL;
     virConfPtr conf = NULL;
     int ret = -1;
@@ -114,10 +116,10 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml,
     conn = virGetConnect();
     if (!conn) goto fail;
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xml, &xmlData) < 0)
         goto fail;
 
-    if (virtTestLoadFile(xmcfg, &xmcfgPtr, MAX_FILE) < 0)
+    if (virtTestLoadFile(xmcfg, &xmcfgData) < 0)
         goto fail;
 
     /* Many puppies died to bring you this code. */
@@ -125,7 +127,7 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml,
     priv.caps = caps;
     conn->privateData = &priv;
 
-    if (!(conf = virConfReadMem(xmcfgPtr, strlen(xmcfgPtr), 0)))
+    if (!(conf = virConfReadMem(xmcfgData, strlen(xmcfgData), 0)))
         goto fail;
 
     if (!(def = xenParseXM(conf, priv.xendConfigVersion, priv.caps)))
@@ -144,6 +146,8 @@ static int testCompareFormatXML(const char *xmcfg, const char *xml,
  fail:
     if (conf)
         virConfFree(conf);
+    VIR_FREE(xmlData);
+    VIR_FREE(xmcfgData);
     VIR_FREE(gotxml);
     virDomainDefFree(def);
     virUnrefConnect(conn);
@@ -158,18 +162,30 @@ struct testInfo {
     int mode;
 };
 
-static int testCompareHelper(const void *data) {
+static int
+testCompareHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char cfg[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/xmconfigdata/test-%s.xml",
-             abs_srcdir, info->name);
-    snprintf(cfg, PATH_MAX, "%s/xmconfigdata/test-%s.cfg",
-             abs_srcdir, info->name);
+    char *xml = NULL;
+    char *cfg = NULL;
+
+    if (virAsprintf(&xml, "%s/xmconfigdata/test-%s.xml",
+                    abs_srcdir, info->name) < 0 ||
+        virAsprintf(&cfg, "%s/xmconfigdata/test-%s.cfg",
+                    abs_srcdir, info->name) < 0)
+        goto cleanup;
+
     if (info->mode == 0)
-        return testCompareParseXML(cfg, xml, info->version);
+        result = testCompareParseXML(cfg, xml, info->version);
     else
-        return testCompareFormatXML(cfg, xml, info->version);
+        result = testCompareFormatXML(cfg, xml, info->version);
+
+cleanup:
+    free(xml);
+    free(cfg);
+
+    return result;
 }
 
 
@@ -177,7 +193,6 @@ static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/xml2sexprtest.c b/tests/xml2sexprtest.c
index cf530b6..b6d8c00 100644
--- a/tests/xml2sexprtest.c
+++ b/tests/xml2sexprtest.c
@@ -15,25 +15,23 @@
 #include "testutilsxen.h"
 
 static char *progname;
+static char cwd[PATH_MAX];
 static char *abs_srcdir;
 static virCapsPtr caps;
 
-#define MAX_FILE 4096
-
-static int testCompareFiles(const char *xml, const char *sexpr,
-                            int xendConfigVersion) {
-  char xmlData[MAX_FILE];
-  char sexprData[MAX_FILE];
+static int
+testCompareFiles(const char *xml, const char *sexpr, int xendConfigVersion)
+{
+  char *xmlData = NULL;
+  char *sexprData = NULL;
   char *gotsexpr = NULL;
-  char *xmlPtr = &(xmlData[0]);
-  char *sexprPtr = &(sexprData[0]);
   int ret = -1;
   virDomainDefPtr def = NULL;
 
-  if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0)
+  if (virtTestLoadFile(xml, &xmlData) < 0)
       goto fail;
 
-  if (virtTestLoadFile(sexpr, &sexprPtr, MAX_FILE) < 0)
+  if (virtTestLoadFile(sexpr, &sexprData) < 0)
       goto fail;
 
   if (!(def = virDomainDefParseString(caps, xmlData,
@@ -51,8 +49,10 @@ static int testCompareFiles(const char *xml, const char *sexpr,
   ret = 0;
 
  fail:
-  virDomainDefFree(def);
+  free(xmlData);
+  free(sexprData);
   free(gotsexpr);
+  virDomainDefFree(def);
 
   return ret;
 }
@@ -64,23 +64,34 @@ struct testInfo {
     int version;
 };
 
-static int testCompareHelper(const void *data) {
+static int
+testCompareHelper(const void *data)
+{
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char args[PATH_MAX];
-    snprintf(xml, PATH_MAX, "%s/xml2sexprdata/xml2sexpr-%s.xml",
-             abs_srcdir, info->input);
-    snprintf(args, PATH_MAX, "%s/xml2sexprdata/xml2sexpr-%s.sexpr",
-             abs_srcdir, info->output);
-    return testCompareFiles(xml, args, info->version);
-}
+    char *xml = NULL;
+    char *args = NULL;
+
+    if (virAsprintf(&xml, "%s/xml2sexprdata/xml2sexpr-%s.xml",
+                    abs_srcdir, info->input) < 0 ||
+        virAsprintf(&args, "%s/xml2sexprdata/xml2sexpr-%s.sexpr",
+                    abs_srcdir, info->output) < 0) {
+        goto cleanup;
+    }
 
+    result = testCompareFiles(xml, args, info->version);
+
+cleanup:
+    free(xml);
+    free(args);
+
+    return result;
+}
 
 static int
 mymain(int argc, char **argv)
 {
     int ret = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c
index a5fb4f7..1b58db8 100644
--- a/tests/xml2vmxtest.c
+++ b/tests/xml2vmxtest.c
@@ -11,13 +11,12 @@
 # include "testutils.h"
 # include "vmx/vmx.h"
 
-static char *progname = NULL;
-static char *abs_srcdir = NULL;
-static virCapsPtr caps = NULL;
+static char *progname;
+static char cwd[PATH_MAX];
+static char *abs_srcdir;
+static virCapsPtr caps;
 static virVMXContext ctx;
 
-# define MAX_FILE 4096
-
 static void
 testCapsInit(void)
 {
@@ -71,18 +70,16 @@ static int
 testCompareFiles(const char *xml, const char *vmx, int virtualHW_version)
 {
     int result = -1;
-    char xmlData[MAX_FILE];
-    char vmxData[MAX_FILE];
+    char *xmlData = NULL;
+    char *vmxData = NULL;
     char *formatted = NULL;
-    char *xmlPtr = &(xmlData[0]);
-    char *vmxPtr = &(vmxData[0]);
     virDomainDefPtr def = NULL;
 
-    if (virtTestLoadFile(xml, &xmlPtr, MAX_FILE) < 0) {
+    if (virtTestLoadFile(xml, &xmlData) < 0) {
         goto failure;
     }
 
-    if (virtTestLoadFile(vmx, &vmxPtr, MAX_FILE) < 0) {
+    if (virtTestLoadFile(vmx, &vmxData) < 0) {
         goto failure;
     }
 
@@ -106,6 +103,8 @@ testCompareFiles(const char *xml, const char *vmx, int virtualHW_version)
     result = 0;
 
   failure:
+    VIR_FREE(xmlData);
+    VIR_FREE(vmxData);
     VIR_FREE(formatted);
     virDomainDefFree(def);
 
@@ -121,16 +120,25 @@ struct testInfo {
 static int
 testCompareHelper(const void *data)
 {
+    int result = -1;
     const struct testInfo *info = data;
-    char xml[PATH_MAX];
-    char vmx[PATH_MAX];
+    char *xml = NULL;
+    char *vmx = NULL;
+
+    if (virAsprintf(&xml, "%s/xml2vmxdata/xml2vmx-%s.xml", abs_srcdir,
+                    info->input) < 0 ||
+        virAsprintf(&vmx, "%s/xml2vmxdata/xml2vmx-%s.vmx", abs_srcdir,
+                    info->output) < 0) {
+        goto cleanup;
+    }
+
+    result = testCompareFiles(xml, vmx, info->virtualHW_version);
 
-    snprintf(xml, PATH_MAX, "%s/xml2vmxdata/xml2vmx-%s.xml", abs_srcdir,
-             info->input);
-    snprintf(vmx, PATH_MAX, "%s/xml2vmxdata/xml2vmx-%s.vmx", abs_srcdir,
-             info->output);
+  cleanup:
+    VIR_FREE(xml);
+    VIR_FREE(vmx);
 
-    return testCompareFiles(xml, vmx, info->virtualHW_version);
+    return result;
 }
 
 static int
@@ -201,7 +209,6 @@ static int
 mymain(int argc, char **argv)
 {
     int result = 0;
-    char cwd[PATH_MAX];
 
     progname = argv[0];
 
-- 
1.7.0.4




More information about the libvir-list mailing list