diff --git a/cat/virt-filesystems.c b/cat/virt-filesystems.c index 690fe3c6d..c28c4b1c0 100644 --- a/cat/virt-filesystems.c +++ b/cat/virt-filesystems.c @@ -582,12 +582,14 @@ do_output_vgs (void) exit (EXIT_FAILURE); for (i = 0; i < vgs->len; ++i) { - char name[PATH_MAX]; + char *name; char uuid[33]; char **parents; - strcpy (name, "/dev/"); - strcpy (&name[5], vgs->val[i].vg_name); + if (asprintf (&name, "/dev/%s", vgs->val[i].vg_name) == -1) { + perror ("asprintf"); + exit (EXIT_FAILURE); + } memcpy (uuid, vgs->val[i].vg_uuid, 32); uuid[32] = '\0'; @@ -597,6 +599,7 @@ do_output_vgs (void) write_row (name, "vg", NULL, NULL, -1, (int64_t) vgs->val[i].vg_size, parents, uuid); + free (name); free_strings (parents); } diff --git a/fish/copy.c b/fish/copy.c index f29d6ef2e..5b1bf4c1c 100644 --- a/fish/copy.c +++ b/fish/copy.c @@ -145,9 +145,10 @@ make_tar_from_local (const char *local) dup2 (fd[1], 1); close (fd[1]); - char buf[PATH_MAX]; + size_t buf_len = strlen (local) + 1; + char buf[buf_len]; const char *dirname, *basename; - if (split_path (buf, sizeof buf, local, &dirname, &basename) == -1) + if (split_path (buf, buf_len, local, &dirname, &basename) == -1) _exit (EXIT_FAILURE); tar_create (dirname, basename); @@ -242,19 +243,26 @@ run_copy_out (const char *cmd, size_t argc, char *argv[]) return -1; } if (r == 1) { /* is file */ - char buf[PATH_MAX]; + size_t buf_len = strlen (remote) + 1; + char buf[buf_len]; const char *basename; - if (split_path (buf, sizeof buf, remote, NULL, &basename) == -1) { + if (split_path (buf, buf_len, remote, NULL, &basename) == -1) { free (remote); return -1; } - char filename[PATH_MAX]; - snprintf (filename, sizeof filename, "%s/%s", local, basename); - if (guestfs_download (g, remote, filename) == -1) { + char *filename; + if (asprintf (&filename, "%s/%s", local, basename) == -1) { + perror ("asprintf"); free (remote); return -1; } + if (guestfs_download (g, remote, filename) == -1) { + free (remote); + free (filename); + return -1; + } + free (filename); } else { /* not a regular file */ r = guestfs_is_dir (g, remote); @@ -270,9 +278,10 @@ run_copy_out (const char *cmd, size_t argc, char *argv[]) return -1; } - char buf[PATH_MAX]; + size_t buf_len = strlen (remote) + 1; + char buf[buf_len]; const char *basename; - if (split_path (buf, sizeof buf, remote, NULL, &basename) == -1) { + if (split_path (buf, buf_len, remote, NULL, &basename) == -1) { free (remote); return -1; } diff --git a/src/launch-appliance.c b/src/launch-appliance.c index d63d3140f..ff3b73087 100644 --- a/src/launch-appliance.c +++ b/src/launch-appliance.c @@ -294,9 +294,10 @@ launch_appliance (guestfs_h *g, const char *arg) cachemode = ",cache=writeback"; } - char buf2[PATH_MAX + 64]; + size_t buf2_len = strlen (appliance) + 64; + char buf2[buf2_len]; add_cmdline (g, "-drive"); - snprintf (buf2, sizeof buf2, "file=%s,snapshot=on,id=appliance,if=%s%s", + snprintf (buf2, buf2_len, "file=%s,snapshot=on,id=appliance,if=%s%s", appliance, virtio_scsi ? "none" : "virtio", cachemode); add_cmdline (g, buf2); diff --git a/test-tool/test-tool.c b/test-tool/test-tool.c index ba574ecf8..4b764ee42 100644 --- a/test-tool/test-tool.c +++ b/test-tool/test-tool.c @@ -293,7 +293,7 @@ cleanup_wrapper (void) static void set_qemu (const char *path, int use_wrapper) { - char buffer[PATH_MAX]; + char *buffer; struct stat statbuf; int fd; FILE *fp; @@ -318,14 +318,19 @@ set_qemu (const char *path, int use_wrapper) } /* This should be a source directory, so check it. */ - snprintf (buffer, sizeof buffer, "%s/pc-bios", path); + if (asprintf (&buffer, "%s/pc-bios", path) == -1) { + perror ("asprintf"); + exit (EXIT_FAILURE); + } if (stat (buffer, &statbuf) == -1 || !S_ISDIR (statbuf.st_mode)) { fprintf (stderr, _("%s: does not look like a qemu source directory\n"), path); + free (buffer); exit (EXIT_FAILURE); } + free (buffer); /* Make a wrapper script. */ fd = mkstemp (qemuwrapper);