[glib] glib-compile-resources: do not leak c_name
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib] glib-compile-resources: do not leak c_name
- Date: Wed, 16 Dec 2015 14:07:42 +0000 (UTC)
commit 4cda92b587232f7d25cab4b7ef7ba043aad8e506
Author: Roman Lebedev <lebedev ri gmail com>
Date: Thu Oct 29 14:41:48 2015 +0300
glib-compile-resources: do not leak c_name
As per #578363, "if one requests e.g. strings via GOptionEntry.arg_data
then those are strduped and needs to be free'ed by the application."
Fixes following leak:
=================================================================
==29426==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 10 byte(s) in 1 object(s) allocated from:
0 0x7f3ab783d37a in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.2+0x9437a)
1 0x7f3ab70f7c82 in g_malloc /home/lebedevri/src/glib/glib/gmem.c:94
2 0x7f3ab70f7f60 in g_malloc_n /home/lebedevri/src/glib/glib/gmem.c:330
3 0x7f3ab713258e in g_strndup /home/lebedevri/src/glib/glib/gstrfuncs.c:425
4 0x7f3ab709c86b in strdup_len /home/lebedevri/src/glib/glib/gconvert.c:864
5 0x7f3ab709c966 in g_locale_to_utf8 /home/lebedevri/src/glib/glib/gconvert.c:905
6 0x7f3ab7103c32 in parse_arg /home/lebedevri/src/glib/glib/goption.c:1276
7 0x7f3ab71066fb in parse_long_option /home/lebedevri/src/glib/glib/goption.c:1670
8 0x7f3ab7108047 in g_option_context_parse /home/lebedevri/src/glib/glib/goption.c:1997
9 0x408532 in main /home/lebedevri/src/glib/gio/glib-compile-resources.c:629
10 0x7f3ab6c72b44 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21b44)
https://bugzilla.gnome.org/show_bug.cgi?id=757299
gio/glib-compile-resources.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
---
diff --git a/gio/glib-compile-resources.c b/gio/glib-compile-resources.c
index 6d94dea..b84f0e4 100644
--- a/gio/glib-compile-resources.c
+++ b/gio/glib-compile-resources.c
@@ -637,6 +637,7 @@ main (int argc, char **argv)
if (argc != 2)
{
g_printerr (_("You should give exactly one file name\n"));
+ g_free (c_name);
return 1;
}
@@ -701,6 +702,7 @@ main (int argc, char **argv)
if ((table = parse_resource_file (srcfile, !generate_dependencies)) == NULL)
{
g_free (target);
+ g_free (c_name);
return 1;
}
@@ -725,6 +727,7 @@ main (int argc, char **argv)
if (fd == -1)
{
g_printerr ("Can't open temp file\n");
+ g_free (c_name);
return 1;
}
close (fd);
@@ -770,6 +773,7 @@ main (int argc, char **argv)
{
g_printerr ("%s\n", error->message);
g_free (target);
+ g_free (c_name);
return 1;
}
@@ -781,6 +785,7 @@ main (int argc, char **argv)
if (file == NULL)
{
g_printerr ("can't write to file %s", target);
+ g_free (c_name);
return 1;
}
@@ -817,6 +822,7 @@ main (int argc, char **argv)
&data_size, NULL))
{
g_printerr ("can't read back temporary file");
+ g_free (c_name);
return 1;
}
g_unlink (binary_target);
@@ -825,6 +831,7 @@ main (int argc, char **argv)
if (file == NULL)
{
g_printerr ("can't write to file %s", target);
+ g_free (c_name);
return 1;
}
@@ -920,6 +927,7 @@ main (int argc, char **argv)
g_free (target);
g_hash_table_destroy (table);
g_free (xmllint);
+ g_free (c_name);
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]