# HG changeset patch # User Daniel Atallah # Date 1229964113 0 # Node ID 5d693af3e9e27587a708b630e305e7474f5efa73 # Parent f27910934e6974efc727eebc1228d410518b4e62 Fix a leak "KuSh" discovered using "cppcheck". Fixes #7858. Also, make the relevant code less of a horrible abomination. diff -r f27910934e69 -r 5d693af3e9e2 libpurple/protocols/gg/buddylist.c --- a/libpurple/protocols/gg/buddylist.c Mon Dec 22 16:22:08 2008 +0000 +++ b/libpurple/protocols/gg/buddylist.c Mon Dec 22 16:41:53 2008 +0000 @@ -216,13 +216,14 @@ PurpleBlistNode *gnode, *cnode, *bnode; PurpleGroup *group; PurpleBuddy *buddy; - - char *buddylist = g_strdup(""); + GString *buddylist; char *ptr; if ((blist = purple_get_blist()) == NULL) return NULL; + buddylist = g_string_sized_new(1024); + for (gnode = blist->root; gnode != NULL; gnode = gnode->next) { if (!PURPLE_BLIST_NODE_IS_GROUP(gnode)) continue; @@ -247,19 +248,16 @@ alias = buddy->alias ? buddy->alias : buddy->name; gname = group->name; - ptr = buddylist; - buddylist = g_strdup_printf( - "%s%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", - ptr, alias, alias, alias, alias, + g_string_append_printf(buddylist, + "%s;%s;%s;%s;%s;%s;%s;%s%s\r\n", + alias, alias, alias, alias, "", gname, name, "", ""); - - g_free(ptr); } } } - ptr = charset_convert(buddylist, "UTF-8", "CP1250"); - g_free(buddylist); + ptr = charset_convert(buddylist->str, "UTF-8", "CP1250"); + g_string_free(buddylist, TRUE); return ptr; } /* }}} */