# HG changeset patch # User Paul Aurich # Date 1293515877 0 # Node ID 9b55bc3e2640472a94a774808007d3d9038bd988 # Parent 0c0b94fb9ac764b674a2099b98a50955d36c115b 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) diff -r 0c0b94fb9ac7 -r 9b55bc3e2640 libpurple/protocols/oscar/tlv.c --- 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; } /**