From patchwork Wed Feb 17 17:42:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 25710 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id DBC7244B434 for ; Wed, 17 Feb 2021 19:42:47 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A763868A0EA; Wed, 17 Feb 2021 19:42:47 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-yb1-f201.google.com (mail-yb1-f201.google.com [209.85.219.201]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BD528687F21 for ; Wed, 17 Feb 2021 19:42:41 +0200 (EET) Received: by mail-yb1-f201.google.com with SMTP id y7so16198003ybh.20 for ; Wed, 17 Feb 2021 09:42:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to; bh=3hhM1zWNFyx+feTWTSrKV+bC312CjkdelUtsTCMrVzk=; b=mqLiebDmU04x+ih0nml9W+XkM4rH0xyJ2KjyQ2++oh6YOCsQXwYYZYpM4Ks89J9WAR YMfr3AvRFQalm25IoLIppXsO0+qtyIwkwP51GjuDu+LivBjm7w3fYOcXjzTxitRpNORv TJyGrFrmjrI1dWG38CfymiD6l1OmXrk7hOEeG6bu4t/Km3Df0X3QdVU000MH4y85wBpN v2/GHJvAWah/5lOsMucW79VKstcL7M+76+euQMoBp12Ur+AdBwlb8mnv+ZTt8wKnt7JR 8hX6tzJiniNIm/Iw+Y9i8Yel674orELGnA52devRmw/8PRpQRtr3qeA1yT2D/W+N7dG5 fEeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to; bh=3hhM1zWNFyx+feTWTSrKV+bC312CjkdelUtsTCMrVzk=; b=EHhGVNUUVaUV7hyURF27uiwueg+FaVY2PPHS2AYeojWPgrcfuNPWvcCsejGh1pQj+M 0FNgFPtcQLGvi0AQ2U2R5KZapoO5HBlvUBCjHWEOcrVY9st2t50RlAcodsowtMvWGg8j 4oa5fu0olC/A3S7LP8duY6ILXxyjZMC8uYYcqw9wsGHozfO6ynE+vTH0UqOxuOvdclLB aneyJi1ThmJTakk93IEaYZ967aWGASi3lCmOhuyOBpkn924/vhZFoO+uh1OUOgX3PTHl pxoOZaeUhl9e6+AqikPbQuAZdjdrdTK+vhNh8mYtdTCeCpGgePgpr48oYgIboJ6+N21d misQ== X-Gm-Message-State: AOAM531AxyRSUuk0J4W0SqZfz9Yc46puIRwSHbYrqJg4YIZ/mnGtqmWF +Fwinkin158kYRwFKb+moPvkRU5YUy3FLYw6Z/XghohB4uVDjnm2DvGG/8Ve8Hsoj2jlaP4GqYm cW88Y0jg2XqDkQZ1nqw/5heeunoOVe73h4cHcvYW3brpcs0931fAy/vBvYXFSLZA= X-Google-Smtp-Source: ABdhPJzqDgjuAiKrNbZmxP0uWmaVDuIwvXvGqeqqCF+HUlcbbYg0pzCEoh83SySafTdgqvAf23KaOUkyeqU= X-Received: from wonkap.kir.corp.google.com ([2620:15c:17:10:ed38:67:5a63:82cb]) (user=wonkap job=sendgmr) by 2002:a25:ae64:: with SMTP id g36mr794578ybe.296.1613583760013; Wed, 17 Feb 2021 09:42:40 -0800 (PST) Date: Wed, 17 Feb 2021 09:42:38 -0800 In-Reply-To: Message-Id: <20210217174238.3269771-1-wonkap@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.30.0.478.g8a0d178c01-goog From: Wonkap Jang To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v3] avcodec/libvpxenc: fix potential memory leak. X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" While parsing ref_frame_config, AVdictionary needs to be manually deallocated. --- libavcodec/libvpxenc.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 284cb9a108..56a1b5aafe 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -127,7 +127,6 @@ typedef struct VPxEncoderContext { int roi_warned; #if CONFIG_LIBVPX_VP9_ENCODER && defined(VPX_CTRL_VP9E_SET_MAX_INTER_BITRATE_PCT) vpx_svc_ref_frame_config_t ref_frame_config; - AVDictionary *vpx_ref_frame_config; #endif } VPxContext; @@ -1595,15 +1594,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); + AVDictionary* vpx_ref_frame_config = NULL; + + if (av_dict_parse_string(&vpx_ref_frame_config, en->value, "=", ":", 0) != 0) { + av_log(avctx, AV_LOG_WARNING, + "Error in parsing ref-frame-config. \n"); + } else { + while ((en2 = av_dict_get(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); + } } + av_dict_free(&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,