rtpenc_mpegts: Set chain->rtp_ctx only after avformat_write_header succeeded

By making sure we at each time only have one pointer set, either a
local variable or one in the context, we avoid potential double frees
in the cleanup routines. If chain->rtp_ctx is set, it is closed by
calling avformat_write_trailer, but that shouldn't be called unless
avformat_write_header succeeded.

This issue was pointed out by Andreas Cadhalpun.

Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
Martin Storsjö 2015-03-09 23:14:19 +02:00
parent c83dd2d2a4
commit cf402d6fa8
1 changed files with 1 additions and 2 deletions

View File

@ -88,11 +88,10 @@ static int rtp_mpegts_write_header(AVFormatContext *s)
st->time_base.num = 1; st->time_base.num = 1;
st->time_base.den = 90000; st->time_base.den = 90000;
st->codec->codec_id = AV_CODEC_ID_MPEG2TS; st->codec->codec_id = AV_CODEC_ID_MPEG2TS;
chain->rtp_ctx = rtp_ctx;
rtp_ctx->pb = s->pb; rtp_ctx->pb = s->pb;
if ((ret = avformat_write_header(rtp_ctx, NULL)) < 0) if ((ret = avformat_write_header(rtp_ctx, NULL)) < 0)
goto fail; goto fail;
rtp_ctx = NULL; chain->rtp_ctx = rtp_ctx;
return 0; return 0;