On Thu, Nov 13, 2025 at 03:58:50PM -0600, Eric Blake via Libguestfs wrote:
No need to re-strdup things in a loop of getline - since we are
using
popen to get the output in the first place, we can use the shell to
hand us just the final line.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
Even though the POSIX folks ruled today that our "ab"use of a
getline() loop to determine the final line of du output was
non-portable [1], I was still miffed at the malloc overhead that our
workaround for rawhide glibc entailed. So this is the result I came
up with.
[1]
https://www.austingroupbugs.net/bug_view_page.php?bug_id=1953
plugins/linuxdisk/filesystem.c | 28 +++++++---------------------
1 file changed, 7 insertions(+), 21 deletions(-)
diff --git a/plugins/linuxdisk/filesystem.c b/plugins/linuxdisk/filesystem.c
index 283af61a..aa4615e6 100644
--- a/plugins/linuxdisk/filesystem.c
+++ b/plugins/linuxdisk/filesystem.c
@@ -148,7 +148,7 @@ create_filesystem (struct virtual_disk *disk)
static int64_t
estimate_size (void)
{
- CLEANUP_FREE char *command = NULL, *line = NULL, *lastline = NULL;
+ CLEANUP_FREE char *command = NULL, *line = NULL;
Doh - this line...
+ /* Should only be one line of input. */
+ if (getline (&line, &len, fp) == -1 || ferror (fp)) {
nbdkit_error ("getline failed: %m");
pclose (fp);
+ free (line);
...means that this addition is not only unnecessary, but a double-free
bug. Good thing I waited for a review, rather than pushing right away.
return -1;
--
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization:
qemu.org |
libguestfs.org