mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-01-19 05:49:09 +02:00
avcodec/libaacplus: Cleanup in case of init failure
Fixes: memleak Fixes: 6b343214a0c12d94c1ea0ae9c3102dba/signal_sigsegv_262857d_8792_71ba605ad9ca9068b8218a6ce3628c25.mov Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
1f12a889da
commit
033b49e02d
@ -35,6 +35,8 @@ typedef struct aacPlusAudioContext {
|
|||||||
unsigned long samples_input;
|
unsigned long samples_input;
|
||||||
} aacPlusAudioContext;
|
} aacPlusAudioContext;
|
||||||
|
|
||||||
|
static int aacPlus_encode_close(AVCodecContext *avctx);
|
||||||
|
|
||||||
static av_cold int aacPlus_encode_init(AVCodecContext *avctx)
|
static av_cold int aacPlus_encode_init(AVCodecContext *avctx)
|
||||||
{
|
{
|
||||||
aacPlusAudioContext *s = avctx->priv_data;
|
aacPlusAudioContext *s = avctx->priv_data;
|
||||||
@ -67,6 +69,7 @@ static av_cold int aacPlus_encode_init(AVCodecContext *avctx)
|
|||||||
aacplus_cfg->inputFormat = avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? AACPLUS_INPUT_FLOAT : AACPLUS_INPUT_16BIT;
|
aacplus_cfg->inputFormat = avctx->sample_fmt == AV_SAMPLE_FMT_FLT ? AACPLUS_INPUT_FLOAT : AACPLUS_INPUT_16BIT;
|
||||||
if (!aacplusEncSetConfiguration(s->aacplus_handle, aacplus_cfg)) {
|
if (!aacplusEncSetConfiguration(s->aacplus_handle, aacplus_cfg)) {
|
||||||
av_log(avctx, AV_LOG_ERROR, "libaacplus doesn't support this output format!\n");
|
av_log(avctx, AV_LOG_ERROR, "libaacplus doesn't support this output format!\n");
|
||||||
|
aacPlus_encode_close(avctx);
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,6 +87,7 @@ static av_cold int aacPlus_encode_init(AVCodecContext *avctx)
|
|||||||
avctx->extradata = av_malloc(decoder_specific_info_size + AV_INPUT_BUFFER_PADDING_SIZE);
|
avctx->extradata = av_malloc(decoder_specific_info_size + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||||
if (!avctx->extradata) {
|
if (!avctx->extradata) {
|
||||||
free(buffer);
|
free(buffer);
|
||||||
|
aacPlus_encode_close(avctx);
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
}
|
}
|
||||||
avctx->extradata_size = decoder_specific_info_size;
|
avctx->extradata_size = decoder_specific_info_size;
|
||||||
@ -117,6 +121,7 @@ static av_cold int aacPlus_encode_close(AVCodecContext *avctx)
|
|||||||
|
|
||||||
av_freep(&avctx->extradata);
|
av_freep(&avctx->extradata);
|
||||||
aacplusEncClose(s->aacplus_handle);
|
aacplusEncClose(s->aacplus_handle);
|
||||||
|
s->aacplus_handle = NULL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user