diff options
author | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-10 16:47:02 +0200 |
---|---|---|
committer | Jakub Adam <jakub.adam@ktknet.cz> | 2016-06-10 16:47:02 +0200 |
commit | 9c24ebe3b424febc46e77450674afee86297b9bd (patch) | |
tree | 156b0a39bf5e4e4d695d6f111b8c7f3e4db44f6e /libpurple/mediamanager.c | |
parent | dab2d957aa27d4d76e88c2fda4b9ad7fd1e9911c (diff) | |
download | pidgin-9c24ebe3b424febc46e77450674afee86297b9bd.tar.gz |
mediamanager: fix invalid memory read
Loop was accessing 'next' pointer in already deallocated GList item.
Reported by Valgrind.
Backport of Pidgin 3 commit 457ce85caedc.
Diffstat (limited to 'libpurple/mediamanager.c')
-rw-r--r-- | libpurple/mediamanager.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libpurple/mediamanager.c b/libpurple/mediamanager.c index a540134137..34f066c3fd 100644 --- a/libpurple/mediamanager.c +++ b/libpurple/mediamanager.c @@ -491,14 +491,18 @@ purple_media_manager_remove_media(PurpleMediaManager *manager, PurpleMedia *medi #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 |