On Wed, Sep 10, 2014 at 01:13:03PM +0200, Pino Toscano wrote:
If add_string_nodup fails free the passed string instead of leaking
it,
as that string would have been owned by the stringbuf.
Adapt devsparts/list-disk-labels to this behaviour.
ACK, but would be good to check over the other calls to
add_string_nodup just to make sure that no changes are required.
Rich.
---
daemon/devsparts.c | 8 ++++----
daemon/guestfsd.c | 1 +
2 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/daemon/devsparts.c b/daemon/devsparts.c
index 70d4ba5..d71a3b3 100644
--- a/daemon/devsparts.c
+++ b/daemon/devsparts.c
@@ -312,7 +312,6 @@ do_list_disk_labels (void)
{
DIR *dir = NULL;
struct dirent *d;
- char *rawdev = NULL;
DECLARE_STRINGSBUF (ret);
dir = opendir (GUESTFSDIR);
@@ -324,6 +323,7 @@ do_list_disk_labels (void)
errno = 0;
while ((d = readdir (dir)) != NULL) {
CLEANUP_FREE char *path = NULL;
+ char *rawdev = NULL;
if (d->d_name[0] == '.')
continue;
@@ -341,12 +341,13 @@ do_list_disk_labels (void)
goto error;
}
- if (add_string (&ret, d->d_name) == -1)
+ if (add_string (&ret, d->d_name) == -1) {
+ free (rawdev);
goto error;
+ }
if (add_string_nodup (&ret, rawdev) == -1)
goto error;
- rawdev = NULL; /* buffer now owned by the stringsbuf */
}
/* Check readdir didn't fail */
@@ -374,6 +375,5 @@ do_list_disk_labels (void)
error:
if (dir)
closedir (dir);
- free (rawdev);
return NULL;
}
diff --git a/daemon/guestfsd.c b/daemon/guestfsd.c
index 3616f3a..4a24557 100644
--- a/daemon/guestfsd.c
+++ b/daemon/guestfsd.c
@@ -532,6 +532,7 @@ add_string_nodup (struct stringsbuf *sb, char *str)
reply_with_perror ("realloc");
free_stringslen (sb->argv, sb->size);
sb->argv = NULL;
+ free (str);
return -1;
}
sb->argv = new_argv;
--
1.9.3
_______________________________________________
Libguestfs mailing list
Libguestfs(a)redhat.com
https://www.redhat.com/mailman/listinfo/libguestfs
--
Richard Jones, Virtualization Group, Red Hat
http://people.redhat.com/~rjones
Read my programming and virtualization blog:
http://rwmj.wordpress.com
Fedora Windows cross-compiler. Compile Windows programs, test, and
build Windows installers. Over 100 libraries supported.
http://fedoraproject.org/wiki/MinGW