oscar: Fix a leak in aim_tlvlist_add_caps

Tue, 28 Dec 2010 05:57:57 +0000

author
Paul Aurich <darkrain42@pidgin.im>
date
Tue, 28 Dec 2010 05:57:57 +0000
changeset 31275
69424db9c7ed
parent 31274
126318200f7d
child 31276
33b107ea2832

oscar: Fix a leak in aim_tlvlist_add_caps

==32109== 384 bytes in 2 blocks are definitely lost in loss record 17,065 of 18,342
==32109== at 0x4C244E8: malloc (vg_replace_malloc.c:236)
==32109== by 0x90D8534: g_malloc (gmem.c:132)
==32109== by 0x1613A4F0: byte_stream_new (bstream.c:32)
==32109== by 0x1615DF63: aim_tlvlist_add_caps (tlv.c:413)
==32109== by 0x16144FE6: aim_locate_setcaps (family_locate.c:1361)
==32109== by 0x16154CA2: purple_parse_locaterights (oscar.c:2806)
==32109== by 0x1614632B: snachandler (family_locate.c:1251)
==32109== by 0x1614B4D2: flap_connection_recv (flap_connection.c:776)

libpurple/protocols/oscar/tlv.c file | annotate | diff | comparison | revisions
--- a/libpurple/protocols/oscar/tlv.c	Tue Dec 28 05:54:04 2010 +0000
+++ b/libpurple/protocols/oscar/tlv.c	Tue Dec 28 05:57:57 2010 +0000
@@ -400,6 +400,7 @@
  */
 int aim_tlvlist_add_caps(GSList **list, const guint16 type, const guint64 caps, const char *mood)
 {
+	int len;
 	ByteStream bs;
 	guint32 bs_size;
 	guint8 *data;
@@ -417,7 +418,11 @@
 	if (data != NULL)
 		byte_stream_putraw(&bs, data, 16);
 
-	return aim_tlvlist_add_raw(list, type, byte_stream_curpos(&bs), bs.data);
+	len = aim_tlvlist_add_raw(list, type, byte_stream_curpos(&bs), bs.data);
+
+	byte_stream_destroy(&bs);
+
+	return len;
 }
 
 /**

mercurial