Message ID | 20200917000816.497453-2-andreas.rheinhardt@gmail.com |
---|---|
State | Accepted |
Headers | show |
Series | [FFmpeg-devel,v2,1/2] avcodec/av1dec: Fix segfault upon allocation error | expand |
Context | Check | Description |
---|---|---|
andriy/default | pending | |
andriy/make | success | Make finished |
andriy/make_fate | success | Make fate finished |
On 9/16/2020 9:08 PM, Andreas Rheinhardt wrote: > The AV1 decoder has the FF_CODEC_CAP_INIT_CLEANUP flag set and yet > the decoder's close function is called manually on some error paths. > This is unnecessary and has been removed in this commit. > > Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> > --- > Unchanged since last time. > > libavcodec/av1dec.c | 4 +--- > 1 file changed, 1 insertion(+), 3 deletions(-) > > diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c > index 871db76b4d..cb46801202 100644 > --- a/libavcodec/av1dec.c > +++ b/libavcodec/av1dec.c > @@ -480,7 +480,6 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) > for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { > s->ref[i].tf.f = av_frame_alloc(); > if (!s->ref[i].tf.f) { > - av1_decode_free(avctx); > av_log(avctx, AV_LOG_ERROR, > "Failed to allocate reference frame buffer %d.\n", i); > return AVERROR(ENOMEM); > @@ -489,7 +488,6 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) > > s->cur_frame.tf.f = av_frame_alloc(); > if (!s->cur_frame.tf.f) { > - av1_decode_free(avctx); > av_log(avctx, AV_LOG_ERROR, > "Failed to allocate current frame buffer.\n"); > return AVERROR(ENOMEM); > @@ -504,7 +502,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) > avctx->extradata_size); > if (ret < 0) { > av_log(avctx, AV_LOG_WARNING, "Failed to read extradata.\n"); > - goto end; > + return ret; > } > > seq = ((CodedBitstreamAV1Context *)(s->cbc->priv_data))->sequence_header; LGTM.
diff --git a/libavcodec/av1dec.c b/libavcodec/av1dec.c index 871db76b4d..cb46801202 100644 --- a/libavcodec/av1dec.c +++ b/libavcodec/av1dec.c @@ -480,7 +480,6 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) for (int i = 0; i < FF_ARRAY_ELEMS(s->ref); i++) { s->ref[i].tf.f = av_frame_alloc(); if (!s->ref[i].tf.f) { - av1_decode_free(avctx); av_log(avctx, AV_LOG_ERROR, "Failed to allocate reference frame buffer %d.\n", i); return AVERROR(ENOMEM); @@ -489,7 +488,6 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) s->cur_frame.tf.f = av_frame_alloc(); if (!s->cur_frame.tf.f) { - av1_decode_free(avctx); av_log(avctx, AV_LOG_ERROR, "Failed to allocate current frame buffer.\n"); return AVERROR(ENOMEM); @@ -504,7 +502,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx) avctx->extradata_size); if (ret < 0) { av_log(avctx, AV_LOG_WARNING, "Failed to read extradata.\n"); - goto end; + return ret; } seq = ((CodedBitstreamAV1Context *)(s->cbc->priv_data))->sequence_header;
The AV1 decoder has the FF_CODEC_CAP_INIT_CLEANUP flag set and yet the decoder's close function is called manually on some error paths. This is unnecessary and has been removed in this commit. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com> --- Unchanged since last time. libavcodec/av1dec.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-)