[PATCH] Fix various memory leaks
Chris Shoemaker
c.shoemaker at cox.net
Thu Feb 10 17:12:39 EST 2005
* Fix memory leak of xml parser context in sixtp-stack.c, string in
gnc_plugin_file_history, gdkCursor in cursors.c, GtkIconSources in
gnc-icons.c, several strings in gnc-menu-extensions.c, TimeSpec and
strings in test-engine-stuff.c
* added some constness to gnc_ext_gen_action_name()
Index: src/backend/file/sixtp-stack.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/sixtp-stack.c,v
retrieving revision 1.5
diff -u -r1.5 sixtp-stack.c
--- src/backend/file/sixtp-stack.c 24 Dec 2002 02:27:09 -0000 1.5
+++ src/backend/file/sixtp-stack.c 10 Feb 2005 02:10:32 -0000
@@ -181,5 +181,9 @@
{
sixtp_stack_frame_destroy(context->top_frame);
g_slist_free(context->data.stack);
+ context->data.saxParserCtxt->userData = NULL;
+ context->data.saxParserCtxt->sax = NULL;
+ xmlFreeParserCtxt(context->data.saxParserCtxt);
+ context->data.saxParserCtxt = NULL;
g_free(context);
}
Index: src/backend/file/sixtp.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/backend/file/sixtp.c,v
retrieving revision 1.7.4.2
diff -u -r1.7.4.2 sixtp.c
--- src/backend/file/sixtp.c 19 Sep 2003 05:53:06 -0000 1.7.4.2
+++ src/backend/file/sixtp.c 10 Feb 2005 02:10:32 -0000
@@ -729,9 +729,11 @@
gpointer global_data,
gpointer *parse_result)
{
- xmlParserCtxtPtr context = xmlCreateFileParserCtxt( filename );
- return sixtp_parse_file_common(sixtp, context, data_for_top_level,
- global_data, parse_result);
+ gboolean ret;
+ xmlParserCtxtPtr context = xmlCreateFileParserCtxt( filename );
+ ret = sixtp_parse_file_common(sixtp, context, data_for_top_level,
+ global_data, parse_result);
+ return ret;
}
gboolean
@@ -742,9 +744,11 @@
gpointer global_data,
gpointer *parse_result)
{
- xmlParserCtxtPtr context = xmlCreateMemoryParserCtxt( bufp, bufsz );
- return sixtp_parse_file_common(sixtp, context, data_for_top_level,
- global_data, parse_result);
+ gboolean ret;
+ xmlParserCtxtPtr context = xmlCreateMemoryParserCtxt( bufp, bufsz );
+ ret = sixtp_parse_file_common(sixtp, context, data_for_top_level,
+ global_data, parse_result);
+ return ret;
}
/***********************************************************************/
Index: src/gnome/gnc-plugin-file-history.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/Attic/gnc-plugin-file-history.c,v
retrieving revision 1.1.2.4
diff -u -r1.1.2.4 gnc-plugin-file-history.c
--- src/gnome/gnc-plugin-file-history.c 20 Oct 2003 06:12:31 -0000 1.1.2.4
+++ src/gnome/gnc-plugin-file-history.c 10 Feb 2005 02:10:44 -0000
@@ -67,6 +67,7 @@
* Other Functions *
************************************************************/
+/* Caller is responsible for g_free'ing returned memory */
static gchar *
gnc_history_generate_label (int index, const gchar *filename)
{
@@ -131,6 +132,7 @@
label_name = gnc_history_generate_label(i, tmp->data);
g_value_set_string (&label, label_name);
g_object_set_property (G_OBJECT(action), "label", &label);
+ g_value_unset(&label);
g_free(label_name);
/* set the filename for the callback function */
Index: src/gnome-utils/cursors.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/cursors.c,v
retrieving revision 1.1.6.3
diff -u -r1.1.6.3 cursors.c
--- src/gnome-utils/cursors.c 20 Jul 2003 04:42:47 -0000 1.1.6.3
+++ src/gnome-utils/cursors.c 10 Feb 2005 02:10:52 -0000
@@ -71,7 +71,7 @@
}
if (type != GNC_CURSOR_NORMAL)
- gdk_cursor_destroy (cursor);
+ gdk_cursor_unref (cursor);
}
Index: src/gnome-utils/gnc-icons.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/Attic/gnc-icons.c,v
retrieving revision 1.1.2.5
diff -u -r1.1.2.5 gnc-icons.c
--- src/gnome-utils/gnc-icons.c 25 Oct 2003 23:52:21 -0000 1.1.2.5
+++ src/gnome-utils/gnc-icons.c 10 Feb 2005 02:10:56 -0000
@@ -44,6 +44,7 @@
gtk_icon_source_set_filename (source, fullname1);
gtk_icon_source_set_pixbuf (source, pixbuf1);
gtk_icon_set_add_source (set, source);
+ gtk_icon_source_free(source);
source = gtk_icon_source_new ();
gtk_icon_source_set_filename (source, fullname2);
@@ -51,6 +52,7 @@
gtk_icon_source_set_size (source, GTK_ICON_SIZE_MENU);
gtk_icon_source_set_size_wildcarded (source, FALSE);
gtk_icon_set_add_source (set, source);
+ gtk_icon_source_free(source);
/* Add it to the factory */
gtk_icon_factory_add (factory, stock, set);
Index: src/gnome-utils/gnc-menu-extensions.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome-utils/gnc-menu-extensions.c,v
retrieving revision 1.9.4.4
diff -u -r1.9.4.4 gnc-menu-extensions.c
--- src/gnome-utils/gnc-menu-extensions.c 7 Jul 2004 04:10:32 -0000 1.9.4.4
+++ src/gnome-utils/gnc-menu-extensions.c 10 Feb 2005 02:10:56 -0000
@@ -586,10 +586,10 @@
}
static GString*
-gnc_ext_gen_action_name( gchar *name )
+gnc_ext_gen_action_name(const gchar *name )
{
//gchar *extName;
- gchar *extChar;
+ const gchar *extChar;
GString *actionName;
//extName = gnc_extension_name(extInf);
@@ -625,7 +625,7 @@
pathElts; pathElts = pathElts->next ) {
GString *eltActionName;
- eltActionName = gnc_ext_gen_action_name( (gchar*)pathElts->data );
+ eltActionName = gnc_ext_gen_action_name( (const gchar*)pathElts->data );
if ( safe_strcmp( (gchar*)pathElts->data, "Main" ) != 0 )
{
@@ -649,6 +649,7 @@
GSList * l = NULL;
ExtensionInfo * info;
+ ENTER(" ");
for (l = extension_list; l; l = l->next) {
info = l->data;
if ((strcmp(info->window, window) != 0)
@@ -662,17 +663,20 @@
GString *extActionName;
GString *extUIPath;
gchar *docString;
+ char *tmpname;
GCallback gcb;
//EggMenuMergeType extType;
- extActionName = gnc_ext_gen_action_name( gnc_extension_name(info) );
+ tmpname = gnc_extension_name( info );
+ extActionName = gnc_ext_gen_action_name( tmpname );
extUIPath = gnc_ext_gen_ui_path( info );
docString = gnc_extension_documentation( info );
DEBUG( "extension [%s]: %s / %s [%s]\n",
- gnc_extension_name( info ),
+ tmpname,
extUIPath->str, extActionName->str,
docString );
+ g_free(tmpname);
//gnc_extension_path( info->extension, (char**)&windowTmp, (char**)&pathTmp );
/*printf( "extension [%s] path: %s:%s\n",
@@ -707,6 +711,7 @@
egg_action_group_add_actions( eag, newEntry, G_N_ELEMENTS (newEntry), info );
egg_menu_merge_insert_action_group( uiMerge, eag, 0 );
new_merge_id = egg_menu_merge_new_merge_id( uiMerge );
+ g_free(docString);
{
gchar *typeStr;
@@ -735,8 +740,11 @@
egg_menu_merge_ensure_update( uiMerge );
}
+ g_string_free(extActionName, TRUE);
+ g_string_free(extUIPath, TRUE);
}
- }
+ } /* end of for loop */
+ LEAVE(" ");
}
#if 0 /* re-add */
Index: src/engine/test-core/test-engine-stuff.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/engine/test-core/test-engine-stuff.c,v
retrieving revision 1.52.4.10
diff -u -r1.52.4.10 test-engine-stuff.c
--- src/engine/test-core/test-engine-stuff.c 30 Dec 2004 21:37:23 -0000 1.52.4.10
+++ src/engine/test-core/test-engine-stuff.c 10 Feb 2005 05:06:55 -0000
@@ -271,6 +271,7 @@
get_random_kvp_value_depth (int type, gint depth)
{
int datype = type;
+ KvpValue *ret;
if (datype == -1)
{
@@ -294,82 +295,74 @@
switch(datype)
{
case KVP_TYPE_GINT64:
- return kvp_value_new_gint64(get_random_gint64());
+ ret = kvp_value_new_gint64(get_random_gint64());
break;
case KVP_TYPE_DOUBLE:
- return NULL;
+ ret = NULL;
break;
case KVP_TYPE_NUMERIC:
- return kvp_value_new_gnc_numeric(get_random_gnc_numeric());
+ ret = kvp_value_new_gnc_numeric(get_random_gnc_numeric());
break;
case KVP_TYPE_STRING:
{
gchar *tmp_str;
- KvpValue *ret;
tmp_str = get_random_string();
if(!tmp_str)
- {
- return NULL;
- }
+ return NULL;
ret = kvp_value_new_string(tmp_str);
g_free(tmp_str);
- return ret;
}
break;
case KVP_TYPE_GUID:
{
GUID *tmp_guid;
- KvpValue *ret;
tmp_guid = get_random_guid();
ret = kvp_value_new_guid(tmp_guid);
g_free(tmp_guid);
- return ret;
}
break;
case KVP_TYPE_TIMESPEC:
{
Timespec *ts = get_random_timespec();
- return kvp_value_new_timespec (*ts);
+ ret = kvp_value_new_timespec (*ts);
+ g_free(ts);
}
break;
case KVP_TYPE_BINARY:
{
bin_data *tmp_data;
- KvpValue *ret;
tmp_data = get_random_binary_data();
ret = kvp_value_new_binary(tmp_data->data, tmp_data->len);
g_free(tmp_data->data);
g_free(tmp_data);
- return ret;
}
break;
case KVP_TYPE_GLIST:
- return kvp_value_new_glist_nc(get_random_glist_depth (depth + 1));
+ ret = kvp_value_new_glist_nc(get_random_glist_depth (depth + 1));
break;
case KVP_TYPE_FRAME:
{
KvpFrame *tmp_frame;
- KvpValue *ret;
tmp_frame = get_random_kvp_frame_depth(depth + 1);
ret = kvp_value_new_frame(tmp_frame);
kvp_frame_delete(tmp_frame);
- return ret;
}
break;
default:
- return NULL;
+ ret = NULL;
break;
}
+ return ret;
}
static KvpFrame*
@@ -392,14 +385,19 @@
gchar *key;
KvpValue *val;
- do
- {
- key = get_random_string_without("/");
- } while (!key || *key == '\0');
-
+ key = NULL;
+ while (key == NULL) {
+ key = get_random_string_without("/");
+ if (*key == '\0') {
+ g_free(key);
+ key = NULL;
+ }
+ }
+
val = get_random_kvp_value_depth (-1, depth + 1);
if (!val)
{
+ g_free(key);
if (!val_added)
vals_to_add++;
continue;
More information about the gnucash-patches
mailing list