avcodec/vp3: Fix memleak upon init failure
Up until now, there was no cleanup in case initializing the Theora VLC
tables failed, leading to memleaks. This commit gets rid of them by
setting the FF_CODEC_CAP_INIT_CLEANUP flag for all decoders in vp3.c;
this also allows to remove some (now redundant) cleanup code.
Reviewed-by: Peter Ross <pross@xvid.org>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
(cherry picked from commit a01ca21bbb)
This commit is contained in:
parent
78ac14f280
commit
4e5a97e393
1 changed files with 5 additions and 9 deletions
|
|
@ -2287,7 +2287,6 @@ static av_cold int allocate_tables(AVCodecContext *avctx)
|
|||
!s->superblock_fragments || !s->macroblock_coding ||
|
||||
!s->dc_pred_row ||
|
||||
!s->motion_val[0] || !s->motion_val[1]) {
|
||||
vp3_decode_end(avctx);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -2302,12 +2301,8 @@ static av_cold int init_frames(Vp3DecodeContext *s)
|
|||
s->last_frame.f = av_frame_alloc();
|
||||
s->golden_frame.f = av_frame_alloc();
|
||||
|
||||
if (!s->current_frame.f || !s->last_frame.f || !s->golden_frame.f) {
|
||||
av_frame_free(&s->current_frame.f);
|
||||
av_frame_free(&s->last_frame.f);
|
||||
av_frame_free(&s->golden_frame.f);
|
||||
if (!s->current_frame.f || !s->last_frame.f || !s->golden_frame.f)
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -3224,7 +3219,8 @@ AVCodec ff_theora_decoder = {
|
|||
AV_CODEC_CAP_FRAME_THREADS,
|
||||
.flush = vp3_decode_flush,
|
||||
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context),
|
||||
.caps_internal = FF_CODEC_CAP_EXPORTS_CROPPING | FF_CODEC_CAP_ALLOCATE_PROGRESS,
|
||||
.caps_internal = FF_CODEC_CAP_EXPORTS_CROPPING | FF_CODEC_CAP_ALLOCATE_PROGRESS |
|
||||
FF_CODEC_CAP_INIT_CLEANUP,
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
@ -3241,7 +3237,7 @@ AVCodec ff_vp3_decoder = {
|
|||
AV_CODEC_CAP_FRAME_THREADS,
|
||||
.flush = vp3_decode_flush,
|
||||
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context),
|
||||
.caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS,
|
||||
.caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS | FF_CODEC_CAP_INIT_CLEANUP,
|
||||
};
|
||||
|
||||
#if CONFIG_VP4_DECODER
|
||||
|
|
@ -3258,6 +3254,6 @@ AVCodec ff_vp4_decoder = {
|
|||
AV_CODEC_CAP_FRAME_THREADS,
|
||||
.flush = vp3_decode_flush,
|
||||
.update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context),
|
||||
.caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS,
|
||||
.caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS | FF_CODEC_CAP_INIT_CLEANUP,
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue