| Index: source/patched-ffmpeg-mt/ffserver.c
|
| ===================================================================
|
| --- source/patched-ffmpeg-mt/ffserver.c (revision 65184)
|
| +++ source/patched-ffmpeg-mt/ffserver.c (working copy)
|
| @@ -92,6 +92,10 @@
|
| "RTSP_SEND_PACKET",
|
| };
|
|
|
| +#if !FF_API_MAX_STREAMS
|
| +#define MAX_STREAMS 20
|
| +#endif
|
| +
|
| #define IOBUFFER_INIT_SIZE 8192
|
|
|
| /* timeouts are in ms */
|
| @@ -2930,7 +2934,7 @@
|
| struct in_addr my_ip)
|
| {
|
| AVFormatContext *avc;
|
| - AVStream avs[MAX_STREAMS];
|
| + AVStream *avs = NULL;
|
| int i;
|
|
|
| avc = avformat_alloc_context();
|
| @@ -2948,14 +2952,29 @@
|
| snprintf(avc->filename, 1024, "rtp://0.0.0.0");
|
| }
|
|
|
| +#if !FF_API_MAX_STREAMS
|
| + if (avc->nb_streams >= INT_MAX/sizeof(*avc->streams) ||
|
| + !(avc->streams = av_malloc(avc->nb_streams * sizeof(*avc->streams))))
|
| + goto sdp_done;
|
| +#endif
|
| + if (avc->nb_streams >= INT_MAX/sizeof(*avs) ||
|
| + !(avs = av_malloc(avc->nb_streams * sizeof(*avs))))
|
| + goto sdp_done;
|
| +
|
| for(i = 0; i < stream->nb_streams; i++) {
|
| avc->streams[i] = &avs[i];
|
| avc->streams[i]->codec = stream->streams[i]->codec;
|
| }
|
| *pbuffer = av_mallocz(2048);
|
| avf_sdp_create(&avc, 1, *pbuffer, 2048);
|
| +
|
| + sdp_done:
|
| +#if !FF_API_MAX_STREAMS
|
| + av_free(avc->streams);
|
| +#endif
|
| av_metadata_free(&avc->metadata);
|
| av_free(avc);
|
| + av_free(avs);
|
|
|
| return strlen(*pbuffer);
|
| }
|
|
|