summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <qulogic@pidgin.im>2019-11-05 20:21:30 -0500
committerElliott Sales de Andrade <qulogic@pidgin.im>2019-11-05 20:21:30 -0500
commit4b01df6346d1a178f1e5a23f2550bcd294872711 (patch)
tree76ffb8a811d221bdb8530ef4a00bef488e9dc631
parent8134b96a7ef7a0f18c120bc3c01889576301e29a (diff)
downloadpidgin-4b01df6346d1a178f1e5a23f2550bcd294872711.tar.gz
Re-arrange jabber_buddy_resource_free to avoid use-after-free warning.
scan-build doesn't recognize the effect of g_list_remove, but this seems a bit cleaner anyway.
-rw-r--r--libpurple/protocols/jabber/buddy.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/libpurple/protocols/jabber/buddy.c b/libpurple/protocols/jabber/buddy.c
index 0323e129da..624e274ff4 100644
--- a/libpurple/protocols/jabber/buddy.c
+++ b/libpurple/protocols/jabber/buddy.c
@@ -74,8 +74,6 @@ jabber_buddy_resource_free(JabberBuddyResource *jbr)
{
g_return_if_fail(jbr != NULL);
- jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
-
g_list_free_full(jbr->commands, (GDestroyNotify)jabber_adhoc_commands_free);
g_list_free_full(jbr->caps.exts, g_free);
g_free(jbr->name);
@@ -92,8 +90,7 @@ void jabber_buddy_free(JabberBuddy *jb)
g_return_if_fail(jb != NULL);
g_free(jb->error_msg);
- while(jb->resources)
- jabber_buddy_resource_free(jb->resources->data);
+ g_list_free_full(jb->resources, (GDestroyNotify)jabber_buddy_resource_free);
g_free(jb);
}
@@ -256,6 +253,7 @@ void jabber_buddy_remove_resource(JabberBuddy *jb, const char *resource)
if(!jbr)
return;
+ jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr);
jabber_buddy_resource_free(jbr);
}