diff options
author | jgeboski <jgeboski@gmail.com> | 2015-09-13 15:57:46 -0400 |
---|---|---|
committer | jgeboski <jgeboski@gmail.com> | 2015-09-13 15:57:46 -0400 |
commit | 881cb974236dd1db4d679005876369eb48c731ca (patch) | |
tree | a73476ded44e3a3500c370065bf674dbb7d935e9 | |
parent | 2d0eb7554371e76f78203a85c70d68e20b25bfb2 (diff) | |
download | bitlbee-facebook-881cb974236dd1db4d679005876369eb48c731ca.tar.gz bitlbee-facebook-881cb974236dd1db4d679005876369eb48c731ca.tar.bz2 bitlbee-facebook-881cb974236dd1db4d679005876369eb48c731ca.tar.xz |
facebook-data: fixed segfault when clearing the thread list
The thread list is not being properly freed, as elements are left in
the internal list. This ends up causing double frees.
This fixes more than one use of the fbchats command segfaulting.
-rw-r--r-- | facebook/facebook-data.c | 13 |
1 files changed, 4 insertions, 9 deletions
diff --git a/facebook/facebook-data.c b/facebook/facebook-data.c index 443e00f..4d02ac1 100644 --- a/facebook/facebook-data.c +++ b/facebook/facebook-data.c @@ -259,19 +259,14 @@ void fb_data_clear_threads(FbData *fata) { FbDataPrivate *priv; - GList *l; - GList *n; + FbId *tid; g_return_if_fail(FB_IS_DATA(fata)); priv = fata->priv; - l = priv->tids->head; - - while (l != NULL) { - n = l->next; - g_queue_delete_link(priv->tids, l); - g_free(l->data); - l = n; + while (!g_queue_is_empty(priv->tids)) { + tid = g_queue_pop_head(priv->tids); + g_free(tid); } } |