Input packets may not be ref counted, meaning the data described in them may be gone at any time.
Fixes segfaults related to the above. Signed-off-by: James Almer <jamr...@gmail.com> --- libavcodec/vp9_raw_reorder_bsf.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/libavcodec/vp9_raw_reorder_bsf.c b/libavcodec/vp9_raw_reorder_bsf.c index 01f3dad898..9c37e9891d 100644 --- a/libavcodec/vp9_raw_reorder_bsf.c +++ b/libavcodec/vp9_raw_reorder_bsf.c @@ -278,7 +278,7 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) { VP9RawReorderContext *ctx = bsf->priv_data; VP9RawReorderFrame *frame; - AVPacket *in; + AVPacket *in = NULL; int err, s; if (ctx->next_frame) { @@ -305,7 +305,12 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) return AVERROR(ENOMEM); } - frame->packet = in; + frame->packet = av_packet_clone(in); + if (!frame->packet) { + err = AVERROR(ENOMEM); + goto fail; + } + frame->pts = in->pts; frame->sequence = ++ctx->sequence; err = vp9_raw_reorder_frame_parse(bsf, frame); @@ -348,8 +353,10 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) // Clear the slot anyway, so we don't end up // in an infinite loop. vp9_raw_reorder_clear_slot(ctx, s); + av_packet_free(&in); return AVERROR_INVALIDDATA; } + av_packet_free(&in); return 0; } vp9_raw_reorder_clear_slot(ctx, s); @@ -368,20 +375,24 @@ static int vp9_raw_reorder_filter(AVBSFContext *bsf, AVPacket *out) av_log(bsf, AV_LOG_ERROR, "Failed to create output " "for transient frame.\n"); ctx->next_frame = NULL; + av_packet_free(&in); return AVERROR_INVALIDDATA; } if (!frame->needs_display) { vp9_raw_reorder_frame_free(&frame); ctx->next_frame = NULL; } + av_packet_free(&in); return 0; } ctx->next_frame = NULL; + av_packet_free(&in); return AVERROR(EAGAIN); fail: vp9_raw_reorder_frame_free(&frame); + av_packet_free(&in); return err; } -- 2.16.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel