]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
libxl: Check for regcomp failure
authorJim Fehlig <jfehlig@suse.com>
Wed, 4 Sep 2013 06:21:42 +0000 (00:21 -0600)
committerJim Fehlig <jfehlig@suse.com>
Wed, 4 Sep 2013 22:51:20 +0000 (16:51 -0600)
Change libxlGetAutoballoonConf() function to return an int
for success/failure, and fail if regcomp fails.

src/libxl/libxl_conf.c

index fcb278b5e7de80fdb938872b6db4b897397a023c..a6344769ee30a6af48fc06f7beaf557ecb624f31 100644 (file)
@@ -1014,21 +1014,28 @@ error:
     return -1;
 }
 
-static bool
-libxlGetAutoballoonConf(libxlDriverConfigPtr cfg)
+static int
+libxlGetAutoballoonConf(libxlDriverConfigPtr cfg, bool *autoballoon)
 {
     regex_t regex;
-    int ret;
+    int res;
+
+    if ((res = regcomp(&regex,
+                      "(^| )dom0_mem=((|min:|max:)[0-9]+[bBkKmMgG]?,?)+($| )",
+                       REG_NOSUB | REG_EXTENDED)) != 0) {
+        char error[100];
+        regerror(res, &regex, error, sizeof(error));
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Failed to compile regex %s"),
+                       error);
 
-    ret = regcomp(&regex,
-            "(^| )dom0_mem=((|min:|max:)[0-9]+[bBkKmMgG]?,?)+($| )",
-            REG_NOSUB | REG_EXTENDED);
-    if (ret)
-        return true;
+        return -1;
+    }
 
-    ret = regexec(&regex, cfg->verInfo->commandline, 0, NULL, 0);
+    res = regexec(&regex, cfg->verInfo->commandline, 0, NULL, 0);
     regfree(&regex);
-    return ret == REG_NOMATCH;
+    *autoballoon = res == REG_NOMATCH;
+    return 0;
 }
 
 libxlDriverConfigPtr
@@ -1098,7 +1105,8 @@ libxlDriverConfigNew(void)
     }
 
     /* setup autoballoon */
-    cfg->autoballoon = libxlGetAutoballoonConf(cfg);
+    if (libxlGetAutoballoonConf(cfg, &cfg->autoballoon) < 0)
+        goto error;
 
     return cfg;