Tue, 05 Nov 2019 20:21:30 -0500
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.
| libpurple/protocols/jabber/buddy.c | file | annotate | diff | comparison | revisions |
--- a/libpurple/protocols/jabber/buddy.c Tue Nov 05 20:21:00 2019 -0500 +++ b/libpurple/protocols/jabber/buddy.c Tue Nov 05 20:21:30 2019 -0500 @@ -74,8 +74,6 @@ { 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 @@ 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 @@ if(!jbr) return; + jbr->jb->resources = g_list_remove(jbr->jb->resources, jbr); jabber_buddy_resource_free(jbr); }