[grisbi-test] [PATCH 07/10] fix memory leaks in metatree_sort_column ()

pbiava pierre.biava at nerim.net
Dim 21 Juil 19:52:30 CEST 2013


---
 src/metatree.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++------------
 1 file changed, 48 insertions(+), 12 deletions(-)

diff --git a/src/metatree.c b/src/metatree.c
index 0f14176..2f37043 100644
--- a/src/metatree.c
+++ b/src/metatree.c
@@ -2492,8 +2492,9 @@ gboolean metatree_sort_column  ( GtkTreeModel * model,
                         gpointer user_data )
 {
     GDate * date_a = NULL, * date_b = NULL;
-    gchar * string_a, * string_b;
+    gchar *string_a = NULL, *string_b = NULL;
     gint no_div_a, no_sous_div_a, no_div_b, no_sous_div_b;
+    gint return_value;
 
     gtk_tree_model_get ( model, a,
 			 META_TREE_DATE_COLUMN, &date_a,
@@ -2508,34 +2509,69 @@ gboolean metatree_sort_column  ( GtkTreeModel * model,
 
     /* on affiche en premier les opérations sans div sous_division */
     if ( no_div_a == 0 )
+    {
+        g_free ( string_a );
+        g_free ( string_b );
+
         return -1;
+    }
+
     if ( no_div_b == 0 )
+    {
+        g_free ( string_a );
+        g_free ( string_b );
+
         return 1;
+    }
+
     if ( no_div_a == no_div_b && no_sous_div_a == 0 )
-        return -1;
-    if ( no_div_a == no_div_b && no_sous_div_b == 0 )
-        return 1;
+    {
+        g_free ( string_a );
+        g_free ( string_b );
 
-    if (!string_b)
-        return 1;
-    if (!string_a)
         return -1;
+    }
 
-    if ( ! date_a && ! date_b )
+    if ( no_div_a == no_div_b && no_sous_div_b == 0 )
     {
-        return g_utf8_collate ( string_a, string_b );
+        g_free ( string_a );
+        g_free ( string_b );
+
+        return 1;
     }
 
-    if ( ! date_b )
+    if ( !string_b )
     {
+        g_free ( string_a );
         return 1;
     }
-    else if ( ! date_a )
+
+    if ( !string_a )
     {
+        g_free ( string_b );
         return -1;
     }
 
-    return g_date_compare ( date_a, date_b );
+    if ( !date_a && !date_b )
+    {
+        return_value = g_utf8_collate ( string_a, string_b );
+        g_free ( string_a );
+        g_free ( string_b );
+
+        return return_value;
+    }
+
+    g_free ( string_a );
+    g_free ( string_b );
+
+    if ( !date_b )
+        return 1;
+    else if ( !date_a )
+        return -1;
+
+    return_value = g_date_compare ( date_a, date_b );
+
+    return return_value;
 }
 
 
-- 
1.8.1.5



Plus d'informations sur la liste de diffusion test