# HG changeset patch # User mstorsjo # Date 1270488339 0 # Node ID 3671d661f4b536a494df08c60e8468d9f7b37992 # Parent bd378c64a9f590960a52520766232d165b3eaaa1 Fix leaks in the AAC RTP depacketizer diff -r bd378c64a9f5 -r 3671d661f4b5 rtpdec.c --- a/rtpdec.c Mon Apr 05 16:13:51 2010 +0000 +++ b/rtpdec.c Mon Apr 05 17:25:39 2010 +0000 @@ -400,7 +400,11 @@ return -1; infos->nb_au_headers = au_headers_length / au_header_size; + if (!infos->au_headers || infos->au_headers_allocated < infos->nb_au_headers) { + av_free(infos->au_headers); infos->au_headers = av_malloc(sizeof(struct AUHeaders) * infos->nb_au_headers); + infos->au_headers_allocated = infos->nb_au_headers; + } /* XXX: We handle multiple AU Section as only one (need to fix this for interleaving) In my test, the FAAD decoder does not behave correctly when sending each AU one by one @@ -599,6 +603,8 @@ void rtp_parse_close(RTPDemuxContext *s) { // TODO: fold this into the protocol specific data fields. + av_free(s->rtp_payload_data->mode); + av_free(s->rtp_payload_data->au_headers); if (!strcmp(ff_rtp_enc_name(s->payload_type), "MP2T")) { ff_mpegts_parse_close(s->ts); } diff -r bd378c64a9f5 -r 3671d661f4b5 rtpdec.h --- a/rtpdec.h Mon Apr 05 16:13:51 2010 +0000 +++ b/rtpdec.h Mon Apr 05 17:25:39 2010 +0000 @@ -48,6 +48,7 @@ int rap_flag; int streamstate; } *au_headers; + int au_headers_allocated; int nb_au_headers; int au_headers_length_bytes; int cur_au_index;