2010-07-25 [colin] 3.7.6cvs22
authorColin Leroy <colin@colino.net>
Sun, 25 Jul 2010 15:15:49 +0000 (15:15 +0000)
committerColin Leroy <colin@colino.net>
Sun, 25 Jul 2010 15:15:49 +0000 (15:15 +0000)
* src/common/utils.c
And now for a real fix. g_list_remove() doesn't, of
course, free the data. But we have to have a solid
pointer to it in order to free it ourselves instead
of relying on the old freed list pointer.
Maybe that's the last patch on the subject now ? :)

ChangeLog
PATCHSETS
configure.ac
src/common/utils.c

index c418ffa61e2d853c526a2a7ae1110e0b0a982880..bd345f35cc4d3214a4dbf20ca033b8ef22627230 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2010-07-25 [colin]     3.7.6cvs22
+
+       * src/common/utils.c
+               And now for a real fix. g_list_remove() doesn't, of
+               course, free the data. But we have to have a solid
+               pointer to it in order to free it ourselves instead
+               of relying on the old freed list pointer.
+               Maybe that's the last patch on the subject now ? :)
+
 2010-07-25 [colin]     3.7.6cvs21
 
        * src/common/utils.c
index 1b81285b70a03275511df9848d73e771e04e2732..a310cb5233006a9652d9d2c8485d48c959f42d9f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.1.2.95 -r 1.1.2.96 src/gtk/quicksearch.c;  ) > 3.7.6cvs19.patchset
 ( cvs diff -u -r 1.36.2.184 -r 1.36.2.185 src/common/utils.c;  ) > 3.7.6cvs20.patchset
 ( cvs diff -u -r 1.36.2.185 -r 1.36.2.186 src/common/utils.c;  ) > 3.7.6cvs21.patchset
+( cvs diff -u -r 1.36.2.186 -r 1.36.2.187 src/common/utils.c;  ) > 3.7.6cvs22.patchset
index 00f76850cb28c845aa61b5856ccad2eaaf36e9ce..8988d14126b48b3ab6b5abbe6e3d12e5c710062c 100644 (file)
@@ -12,7 +12,7 @@ MINOR_VERSION=7
 MICRO_VERSION=6
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=21
+EXTRA_VERSION=22
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index ded320200862f0abd16bc5794eb05f8c1fac29f0..01467f6faf138df6de0801d052fbd4a81f0c9dcc 100644 (file)
@@ -997,18 +997,23 @@ GSList *newsgroup_list_append(GSList *group_list, const gchar *str)
 GList *add_history(GList *list, const gchar *str)
 {
        GList *old;
+       gchar *oldstr;
 
        cm_return_val_if_fail(str != NULL, list);
 
        old = g_list_find_custom(list, (gpointer)str, (GCompareFunc)strcmp2);
        if (old) {
+               oldstr = old->data;
                list = g_list_remove(list, old->data);
+               g_free(oldstr);
        } else if (g_list_length(list) >= MAX_HISTORY_SIZE) {
                GList *last;
 
                last = g_list_last(list);
                if (last) {
+                       oldstr = last->data;
                        list = g_list_remove(list, last->data);
+                       g_free(oldstr);
                }
        }