summaryrefslogtreecommitdiff
path: root/libpurple/mediamanager.c
diff options
context:
space:
mode:
authorJakub Adam <jakub.adam@ktknet.cz>2016-06-10 16:47:02 +0200
committerJakub Adam <jakub.adam@ktknet.cz>2016-06-10 16:47:02 +0200
commit9c24ebe3b424febc46e77450674afee86297b9bd (patch)
tree156b0a39bf5e4e4d695d6f111b8c7f3e4db44f6e /libpurple/mediamanager.c
parentdab2d957aa27d4d76e88c2fda4b9ad7fd1e9911c (diff)
downloadpidgin-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.c6
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