diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-30 13:36:06 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-30 13:36:06 +0100 |
commit | 4f7cc37e5f4a209773062d67e5f61a81f7800fc8 (patch) | |
tree | d71ef0c0eb4a32f5a9c303cca4e2da4de053158c /daemon/guestfsd.c | |
parent | 6dff51fc7d8a33925f164bd66c2c26cd4b94b3df (diff) | |
download | libguestfs-4f7cc37e5f4a209773062d67e5f61a81f7800fc8.tar.gz libguestfs-4f7cc37e5f4a209773062d67e5f61a81f7800fc8.tar.xz libguestfs-4f7cc37e5f4a209773062d67e5f61a81f7800fc8.zip |
Fix unchecked malloc & realloc in 'commandv' func (Jim Meyering).
Diffstat (limited to 'daemon/guestfsd.c')
-rw-r--r-- | daemon/guestfsd.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c index d7ba4821..ba4035ea 100644 --- a/daemon/guestfsd.c +++ b/daemon/guestfsd.c @@ -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; } |