diff libpurple/protocols/msn/contact.c @ 20495:7f5564ebde7f

Fix some memory leaks. Free xmlnodes properly using xmlnode_free instead of g_free.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Sun, 09 Sep 2007 00:43:22 +0000
parents 82d8797e06f3
children f6dff814d95f
line wrap: on
line diff
--- a/libpurple/protocols/msn/contact.c	Sat Sep 08 03:34:49 2007 +0000
+++ b/libpurple/protocols/msn/contact.c	Sun Sep 09 00:43:22 2007 +0000
@@ -415,6 +415,7 @@
 
 		if ( (typedata = xmlnode_get_data(handletype)) == NULL) {
 			purple_debug_error("MSNCL","Error retrieving data from 'Type' child node\n");
+			g_free(typedata);
 			continue;
 		}
 
@@ -655,9 +656,7 @@
 		xmlnode *groupIds;
 		MsnUser *user;
 		MsnUserType usertype;
-		char *passport,*Name,*uid,*type;
-
-		passport = NULL;
+		char *passport = NULL, *Name = NULL, *uid = NULL, *type = NULL;
 
 		contactId= xmlnode_get_child(contactNode,"contactId");
 		uid = xmlnode_get_data(contactId);
@@ -696,6 +695,8 @@
 					contactEmailNode = xmlnode_get_next_twin(contactEmailNode) ){
 				messengerEnabledNode = xmlnode_get_child(contactEmailNode,"isMessengerEnabled");
 				if(messengerEnabledNode == NULL){
+					g_free(uid);
+					g_free(type);
 					break;
 				}
 				msnEnabled = xmlnode_get_data(messengerEnabledNode);
@@ -705,6 +706,10 @@
 					passport = xmlnode_get_data(emailNode);
 					purple_debug_info("MsnAB","Yahoo User %s\n",passport);
 					usertype = MSN_USER_TYPE_YAHOO;
+					g_free(uid);
+					g_free(type);
+					g_free(passport);
+					g_free(msnEnabled);
 					break;
 				}else{
 					/*TODO maybe we can just ignore it in Purple?*/
@@ -728,7 +733,7 @@
 		if (displayName == NULL) {
 			Name = g_strdup(passport);
 		} else {
-			Name =xmlnode_get_data(displayName);
+			Name = xmlnode_get_data(displayName);
 		}
 
 		purple_debug_misc("MsnAB","passport:{%s} uid:{%s} display:{%s}\n",