Fix unchecked malloc & realloc in 'commandv' func (Jim Meyering).
authorRichard Jones <rjones@redhat.com>
Thu, 30 Apr 2009 12:36:06 +0000 (13:36 +0100)
committerRichard Jones <rjones@redhat.com>
Thu, 30 Apr 2009 12:36:06 +0000 (13:36 +0100)
daemon/guestfsd.c

index d7ba482..ba4035e 100644 (file)
@@ -339,20 +339,31 @@ int
 command (char **stdoutput, char **stderror, const char *name, ...)
 {
   va_list args;
-  char **argv;
+  char **argv, **p;
   char *s;
   int i, r;
 
   /* Collect the command line arguments into an array. */
-  va_start (args, name);
-
   i = 2;
   argv = malloc (sizeof (char *) * i);
+  if (argv == NULL) {
+    perror ("malloc");
+    return -1;
+  }
   argv[0] = (char *) name;
   argv[1] = NULL;
 
+  va_start (args, name);
+
   while ((s = va_arg (args, char *)) != NULL) {
-    argv = realloc (argv, sizeof (char *) * (++i));
+    p = realloc (argv, sizeof (char *) * (++i));
+    if (p == NULL) {
+      perror ("realloc");
+      free (argv);
+      va_end (args);
+      return -1;
+    }
+    argv = p;
     argv[i-2] = s;
     argv[i-1] = NULL;
   }