summaryrefslogtreecommitdiffstats
path: root/daemon/guestfsd.c
diff options
context:
space:
mode:
authorRichard Jones <rjones@redhat.com>2009-04-30 13:36:06 +0100
committerRichard Jones <rjones@redhat.com>2009-04-30 13:36:06 +0100
commit4f7cc37e5f4a209773062d67e5f61a81f7800fc8 (patch)
treed71ef0c0eb4a32f5a9c303cca4e2da4de053158c /daemon/guestfsd.c
parent6dff51fc7d8a33925f164bd66c2c26cd4b94b3df (diff)
downloadlibguestfs-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.c19
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;
}