# HG changeset patch # User Sadrul Habib Chowdhury # Date 1189298602 0 # Node ID 7f5564ebde7f29fe23d1cc932dab8f9ec9268ae9 # Parent 82d8797e06f3d0e614d8ffca510cbd27da197fd3 Fix some memory leaks. Free xmlnodes properly using xmlnode_free instead of g_free. diff -r 82d8797e06f3 -r 7f5564ebde7f libpurple/protocols/msn/contact.c --- 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", diff -r 82d8797e06f3 -r 7f5564ebde7f libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Sat Sep 08 03:34:49 2007 +0000 +++ b/libpurple/protocols/msn/notification.c Sun Sep 09 00:43:22 2007 +0000 @@ -1625,7 +1625,7 @@ PurpleConnection *gc; MsnUser *user; const char *passport; - char *psm_str, *currentmedia_str; + char *psm_str, *currentmedia_str, *str; /*get the payload content*/ // purple_debug_info("MSNP14","UBX {%s} payload{%s}\n",cmd->params[0], cmd->payload); @@ -1639,7 +1639,8 @@ psm_str = msn_get_psm(cmd->payload,len); currentmedia_str = msn_parse_currentmedia( - msn_get_currentmedia(cmd->payload, len)); + str = msn_get_currentmedia(cmd->payload, len)); + g_free(str); msn_user_set_statusline(user, psm_str); msn_user_set_currentmedia(user, currentmedia_str); diff -r 82d8797e06f3 -r 7f5564ebde7f libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Sat Sep 08 03:34:49 2007 +0000 +++ b/libpurple/protocols/msn/oim.c Sun Sep 09 00:43:22 2007 +0000 @@ -168,7 +168,7 @@ xmlnode *responseNode, *bodyNode; xmlnode *faultNode, *faultCodeNode, *faultstringNode; xmlnode *detailNode, *challengeNode; - char *faultCodeStr, *faultstring; + char *faultCodeStr = NULL, *faultstring = NULL; responseNode = xmlnode_from_str(body,len); g_return_if_fail(responseNode != NULL); @@ -226,6 +226,8 @@ msn_oim_send_msg(oim); oim_send_process_fail: + g_free(faultstring); + g_free(faultCodeStr); xmlnode_free(responseNode); return ; } @@ -528,20 +530,19 @@ static void msn_oim_get_process(MsnOim *oim, const char *oim_msg) { - xmlnode *oimNode,*bodyNode,*responseNode,*msgNode; - char *msg_data,*msg_str; + xmlnode *oim_node,*bodyNode,*responseNode,*msgNode; + char *msg_str; - oimNode = xmlnode_from_str(oim_msg, strlen(oim_msg)); - bodyNode = xmlnode_get_child(oimNode,"Body"); + oim_node = xmlnode_from_str(oim_msg, strlen(oim_msg)); + bodyNode = xmlnode_get_child(oim_node,"Body"); responseNode = xmlnode_get_child(bodyNode,"GetMessageResponse"); msgNode = xmlnode_get_child(responseNode,"GetMessageResult"); - msg_data = xmlnode_get_data(msgNode); - msg_str = g_strdup(msg_data); - g_free(msg_data); + msg_str = xmlnode_get_data(msgNode); purple_debug_info("OIM","msg:{%s}\n",msg_str); msn_oim_report_to_user(oim,msg_str); g_free(msg_str); + xmlnode_free(oim_node); } static void @@ -635,6 +636,7 @@ rTime = NULL; g_free(nickname); } + g_free(unread); xmlnode_free(node); } diff -r 82d8797e06f3 -r 7f5564ebde7f libpurple/protocols/msn/state.c --- a/libpurple/protocols/msn/state.c Sat Sep 08 03:34:49 2007 +0000 +++ b/libpurple/protocols/msn/state.c Sun Sep 09 00:43:22 2007 +0000 @@ -156,7 +156,7 @@ msn_get_currentmedia(char *xml_str, gsize len) { xmlnode *payloadNode, *currentmediaNode; - char *currentmedia_str, *currentmedia; + char *currentmedia; purple_debug_info("msn","msn get CurrentMedia\n"); payloadNode = xmlnode_from_str(xml_str, len); @@ -167,14 +167,12 @@ currentmediaNode = xmlnode_get_child(payloadNode, "CurrentMedia"); if (currentmediaNode == NULL){ purple_debug_info("msn","No CurrentMedia Node"); - g_free(payloadNode); + xmlnode_free(payloadNode); return NULL; } - currentmedia_str = xmlnode_get_data(currentmediaNode); - currentmedia = g_strdup(currentmedia_str); + currentmedia = xmlnode_get_data(currentmediaNode); - g_free(currentmediaNode); - g_free(payloadNode); + xmlnode_free(payloadNode); return currentmedia; } @@ -184,7 +182,7 @@ msn_get_psm(char *xml_str, gsize len) { xmlnode *payloadNode, *psmNode; - char *psm_str, *psm; + char *psm; purple_debug_info("MSNP14","msn get PSM\n"); payloadNode = xmlnode_from_str(xml_str, len); @@ -195,14 +193,12 @@ psmNode = xmlnode_get_child(payloadNode, "PSM"); if (psmNode == NULL){ purple_debug_info("MSNP14","No PSM status Node"); - g_free(payloadNode); + xmlnode_free(payloadNode); return NULL; } - psm_str = xmlnode_get_data(psmNode); - psm = g_strdup(psm_str); + psm = xmlnode_get_data(psmNode); - g_free(psmNode); - g_free(payloadNode); + xmlnode_free(payloadNode); return psm; }