diff --git a/libavformat/mms.c b/libavformat/mms.c index cbb4739aca..73f4e6b671 100644 --- a/libavformat/mms.c +++ b/libavformat/mms.c @@ -99,6 +99,9 @@ int ff_mms_asf_header_parser(MMSContext *mms) //Please see function send_stream_selection_request(). if (mms->stream_num < MAX_STREAMS && 46 + mms->stream_num * 6 < sizeof(mms->out_buffer)) { + mms->streams = av_fast_realloc(mms->streams, + &mms->nb_streams_allocated, + (mms->stream_num + 1) * sizeof(MMSStream)); mms->streams[mms->stream_num].id = stream_id; mms->stream_num++; } else { diff --git a/libavformat/mms.h b/libavformat/mms.h index 675d6b93ee..7ee0485204 100644 --- a/libavformat/mms.h +++ b/libavformat/mms.h @@ -29,7 +29,7 @@ typedef struct { typedef struct { URLContext *mms_hd; ///< TCP connection handle - MMSStream streams[MAX_STREAMS]; + MMSStream *streams; /** Buffer for outgoing packets. */ /*@{*/ @@ -54,6 +54,7 @@ typedef struct { /*@}*/ int stream_num; ///< stream numbers. + unsigned int nb_streams_allocated; ///< allocated size of streams } MMSContext; int ff_mms_asf_header_parser(MMSContext * mms); diff --git a/libavformat/mmst.c b/libavformat/mmst.c index ccfc212b1f..3d12d82b73 100644 --- a/libavformat/mmst.c +++ b/libavformat/mmst.c @@ -468,6 +468,7 @@ static int mms_close(URLContext *h) } /* free all separately allocated pointers in mms */ + av_free(mms->streams); av_free(mms->asf_header); av_freep(&h->priv_data);