diff options
author | Mike Williams <mike@mikebwilliams.com> | 2011-05-18 11:03:10 -0400 |
---|---|---|
committer | Reinhard Tartler <siretart@tauware.de> | 2011-05-26 12:57:59 +0200 |
commit | db3262b700092e4012ae7564aa29eba1624a398c (patch) | |
tree | 5c7a1df7bb098c02d67052c2dd36b20c2150fc82 | |
parent | 2341c97e8d737876693fc1e0ecfe7f9f6d2b7c57 (diff) | |
download | ffmpeg-db3262b700092e4012ae7564aa29eba1624a398c.tar.gz |
ffserver: Fix a null pointer dereference as a result of the FF_API_MAX_STREAMS cleanup.
Fixed another dereference in the RTSP code.
Removed a useless variable.
Changed an unnecessary looping assignment to a simple assignment suggested by
Maksym.
Added fixes and tweaks suggested by Maksym Veremeyenko [verem@m1stereo.tv] and
Clément B.
-rw-r--r-- | ffmpeg.c | 1 | ||||
-rw-r--r-- | ffserver.c | 21 |
2 files changed, 11 insertions, 11 deletions
@@ -673,6 +673,7 @@ static int read_ffserver_streams(AVFormatContext *s, const char *filename) return err; /* copy stream format */ s->nb_streams = 0; + s->streams = av_mallocz(sizeof(AVStream *) * ic->nb_streams); for(i=0;i<ic->nb_streams;i++) { AVStream *st; AVCodec *codec; diff --git a/ffserver.c b/ffserver.c index b4613af8fe..b95a854363 100644 --- a/ffserver.c +++ b/ffserver.c @@ -2229,11 +2229,11 @@ static int http_prepare_data(HTTPContext *c) av_metadata_set2(&c->fmt_ctx.metadata, "copyright", c->stream->copyright, 0); av_metadata_set2(&c->fmt_ctx.metadata, "title" , c->stream->title , 0); + c->fmt_ctx.streams = av_mallocz(sizeof(AVStream *) * c->stream->nb_streams); + for(i=0;i<c->stream->nb_streams;i++) { - AVStream *st; AVStream *src; - st = av_mallocz(sizeof(AVStream)); - c->fmt_ctx.streams[i] = st; + c->fmt_ctx.streams[i] = av_mallocz(sizeof(AVStream)); /* if file or feed, then just take streams from FFStream struct */ if (!c->stream->feed || c->stream->feed == c->stream) @@ -2241,9 +2241,9 @@ static int http_prepare_data(HTTPContext *c) else src = c->stream->feed->streams[c->stream->feed_streams[i]]; - *st = *src; - st->priv_data = 0; - st->codec->frame_number = 0; /* XXX: should be done in + *(c->fmt_ctx.streams[i]) = *src; + c->fmt_ctx.streams[i]->priv_data = 0; + c->fmt_ctx.streams[i]->codec->frame_number = 0; /* XXX: should be done in AVStream, not in codec */ } /* set output format parameters */ @@ -3385,6 +3385,9 @@ static int rtp_new_av_stream(HTTPContext *c, if (!st) goto fail; ctx->nb_streams = 1; + ctx->streams = av_mallocz(sizeof(AVStream *) * ctx->nb_streams); + if (!ctx->streams) + goto fail; ctx->streams[0] = st; if (!c->stream->feed || @@ -3765,11 +3768,7 @@ static void build_feed_streams(void) } s->oformat = feed->fmt; s->nb_streams = feed->nb_streams; - for(i=0;i<s->nb_streams;i++) { - AVStream *st; - st = feed->streams[i]; - s->streams[i] = st; - } + s->streams = feed->streams; av_set_parameters(s, NULL); if (av_write_header(s) < 0) { http_log("Container doesn't supports the required parameters\n"); |