Re-arrange jabber_buddy_resource_free to avoid use-after-free warning.

Tue, 05 Nov 2019 20:21:30 -0500

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Tue, 05 Nov 2019 20:21:30 -0500
changeset 40145
27c5004a6c65
parent 40144
1d0c0fab2b72
child 40146
66604f791698

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);
 }
 

mercurial