# HG changeset patch # User Mark Doliner # Date 1271059088 0 # Node ID ff8a91b1f795ff61962ab771c1cf7a7329e730fd # Parent 0fb628a28e5c75d4f3bc517f05d6a8d6421b883f Lots of little memleak fixes diff -r 0fb628a28e5c -r ff8a91b1f795 libpurple/protocols/simple/simple.c --- a/libpurple/protocols/simple/simple.c Mon Apr 12 07:13:52 2010 +0000 +++ b/libpurple/protocols/simple/simple.c Mon Apr 12 07:58:08 2010 +0000 @@ -1653,6 +1653,7 @@ } purple_debug(PURPLE_DEBUG_MISC, "simple", "in process response response: %d\n", msg->response); process_input_message(sip, msg); + sipmsg_free(msg); } else { purple_debug(PURPLE_DEBUG_MISC, "simple", "received a incomplete sip msg: %s\n", conn->inbuf); } @@ -1671,6 +1672,7 @@ purple_debug_info("simple", "\n\nreceived - %s\n######\n%s\n#######\n\n", ctime(&currtime), buffer); msg = sipmsg_parse_msg(buffer); if(msg) process_input_message(sip, msg); + sipmsg_free(msg); } } @@ -2021,6 +2023,9 @@ g_free(sip->proxy.target); g_free(sip->proxy.realm); g_free(sip->proxy.digest_session_key); + g_free(sip->status); + g_hash_table_destroy(sip->buddies); + g_free(sip->regcallid); g_free(sip->publish_etag); if (sip->txbuf) purple_circ_buffer_destroy(sip->txbuf); diff -r 0fb628a28e5c -r ff8a91b1f795 libpurple/protocols/simple/sipmsg.c --- a/libpurple/protocols/simple/sipmsg.c Mon Apr 12 07:13:52 2010 +0000 +++ b/libpurple/protocols/simple/sipmsg.c Mon Apr 12 07:58:08 2010 +0000 @@ -55,15 +55,15 @@ } struct sipmsg *sipmsg_parse_header(const gchar *header) { - struct sipmsg *msg = g_new0(struct sipmsg,1); - gchar **parts, **lines = g_strsplit(header,"\r\n",0); + struct sipmsg *msg; + gchar **parts, **lines; gchar *dummy, *dummy2, *tmp; const gchar *tmp2; int i = 1; + lines = g_strsplit(header,"\r\n",0); if(!lines[0]) { g_strfreev(lines); - g_free(msg); return NULL; } @@ -71,10 +71,10 @@ if(!parts[0] || !parts[1] || !parts[2]) { g_strfreev(parts); g_strfreev(lines); - g_free(msg); return NULL; } + msg = g_new0(struct sipmsg,1); if(strstr(parts[0],"SIP")) { /* numeric response */ msg->method = g_strdup(parts[2]); msg->response = strtol(parts[1],NULL,10); @@ -90,7 +90,7 @@ if(!parts[0] || !parts[1]) { g_strfreev(parts); g_strfreev(lines); - g_free(msg); + sipmsg_free(msg); return NULL; } dummy = parts[1]; @@ -106,6 +106,7 @@ dummy2 = tmp; } sipmsg_add_header(msg, parts[0], dummy2); + g_free(dummy2); g_strfreev(parts); } g_strfreev(lines); @@ -116,9 +117,10 @@ if(msg->response) { tmp2 = sipmsg_find_header(msg, "CSeq"); + g_free(msg->method); if(!tmp2) { /* SHOULD NOT HAPPEN */ - msg->method = 0; + msg->method = NULL; } else { parts = g_strsplit(tmp2, " ", 2); msg->method = g_strdup(parts[1]); @@ -168,7 +170,7 @@ return g_string_free(outstr, FALSE); } void sipmsg_add_header(struct sipmsg *msg, const gchar *name, const gchar *value) { - struct siphdrelement *element = g_new0(struct siphdrelement,1); + struct siphdrelement *element = g_new(struct siphdrelement,1); element->name = g_strdup(name); element->value = g_strdup(value); msg->headers = g_slist_append(msg->headers, element);