# HG changeset patch # User Elliott Sales de Andrade # Date 1324535292 0 # Node ID e4af50513560fab14007980366cd9cbf9b8cbe36 # Parent 55da4c7f06bf5d66d03cd2b71a432c033b6049e6 Fix some leaks in XMPP caps hashing, as pointed out by max ulidtko. However, I didn't really apply his patch specifically, and made some other optimizations while I was there. Fixes #14701. diff -r 55da4c7f06bf -r e4af50513560 libpurple/protocols/jabber/caps.c --- a/libpurple/protocols/jabber/caps.c Thu Dec 22 06:14:38 2011 +0000 +++ b/libpurple/protocols/jabber/caps.c Thu Dec 22 06:28:12 2011 +0000 @@ -875,21 +875,24 @@ g_free(formtype); while (fields) { - GList *value; JabberDataFormField *field = (JabberDataFormField*)fields->data; if (!g_str_equal(field->var, "FORM_TYPE")) { /* Append the "var" attribute */ append_escaped_string(context, field->var); /* Append elements' cdata */ - for (value = field->values; value; value = value->next) { - append_escaped_string(context, value->data); - g_free(value->data); + while (field->values) { + append_escaped_string(context, field->values->data); + g_free(field->values->data); + field->values = g_list_delete_link(field->values, + field->values); } + } else { + g_list_free_full(field->values, g_free); } g_free(field->var); - g_list_free(field->values); + g_free(field); fields = g_list_delete_link(fields, fields); }