Fri, 10 Jun 2016 16:47:02 +0200
mediamanager: fix invalid memory read
Loop was accessing 'next' pointer in already deallocated GList item.
Reported by Valgrind.
Backport of Pidgin 3 commit 457ce85caedc.
| libpurple/mediamanager.c | file | annotate | diff | comparison | revisions |
--- a/libpurple/mediamanager.c Mon May 16 14:52:58 2016 +0200 +++ b/libpurple/mediamanager.c Fri Jun 10 16:47:02 2016 +0200 @@ -491,14 +491,18 @@ #ifdef HAVE_MEDIA_APPLICATION g_mutex_lock (&manager->priv->appdata_mutex); - for (list = manager->priv->appdata_info; list; list = list->next) { + list = manager->priv->appdata_info; + while (list) { PurpleMediaAppDataInfo *info = list->data; + GList *next = list->next; if (info->media == media) { manager->priv->appdata_info = g_list_delete_link ( manager->priv->appdata_info, list); free_appdata_info_locked (info); } + + list = next; } g_mutex_unlock (&manager->priv->appdata_mutex); #endif