[FFmpeg-devel] [PATCH v2] avcodec/libvpxenc: fix potential memory leak.
Wonkap Jang
wonkap at google.com
Wed Feb 17 00:29:20 EET 2021
While parsing ref_frame_config, AVdictionary needs to be manually
deallocated.
---
libavcodec/libvpxenc.c | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c
index 284cb9a108..e71ae54f34 100644
--- a/libavcodec/libvpxenc.c
+++ b/libavcodec/libvpxenc.c
@@ -1595,15 +1595,21 @@ static int vpx_encode(AVCodecContext *avctx, AVPacket *pkt,
if (en) {
if (avctx->codec_id == AV_CODEC_ID_VP9) {
AVDictionaryEntry* en2 = NULL;
- av_dict_parse_string(&ctx->vpx_ref_frame_config, en->value, "=", ":", 0);
-
- while ((en2 = av_dict_get(ctx->vpx_ref_frame_config, "", en2, AV_DICT_IGNORE_SUFFIX))) {
- if (vpx_ref_frame_config_parse(ctx, enccfg, en2->key, en2->value, avctx->codec_id) < 0)
- av_log(avctx, AV_LOG_WARNING,
- "Error parsing option '%s = %s'.\n",
- en2->key, en2->value);
+ ctx->vpx_ref_frame_config = NULL;
+ if (av_dict_parse_string(&ctx->vpx_ref_frame_config, en->value, "=", ":", 0) == 0) {
+ while ((en2 = av_dict_get(ctx->vpx_ref_frame_config, "", en2, AV_DICT_IGNORE_SUFFIX))) {
+ if (vpx_ref_frame_config_parse(ctx, enccfg, en2->key, en2->value, avctx->codec_id) < 0)
+ av_log(avctx, AV_LOG_WARNING,
+ "Error parsing option '%s = %s'.\n",
+ en2->key, en2->value);
+ }
+ } else {
+ av_log(avctx, AV_LOG_WARNING,
+ "Error in parsing ref-frame-config. \n");
}
+ if (ctx->vpx_ref_frame_config)
+ av_dict_free(&ctx->vpx_ref_frame_config);
codecctl_intp(avctx, VP9E_SET_SVC_REF_FRAME_CONFIG, (int *)&ctx->ref_frame_config);
} else {
av_log(avctx, AV_LOG_WARNING,
--
2.30.0.478.g8a0d178c01-goog
More information about the ffmpeg-devel
mailing list