diff options
author | Elliott Sales de Andrade <qulogic@pidgin.im> | 2019-11-05 20:21:30 -0500 |
---|---|---|
committer | Elliott Sales de Andrade <qulogic@pidgin.im> | 2019-11-05 20:21:30 -0500 |
commit | 4b01df6346d1a178f1e5a23f2550bcd294872711 (patch) | |
tree | 76ffb8a811d221bdb8530ef4a00bef488e9dc631 | |
parent | 8134b96a7ef7a0f18c120bc3c01889576301e29a (diff) | |
download | pidgin-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.c | 6 |
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); } |