From patchwork Wed Feb 17 03:12:29 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wonkap Jang X-Patchwork-Id: 25683 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 EB883449423 for ; Wed, 17 Feb 2021 05:12:43 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 802E9680ADB; Wed, 17 Feb 2021 05:12:43 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id BBF77689B6C for ; Wed, 17 Feb 2021 05:12:33 +0200 (EET) Received: by mail-pj1-f73.google.com with SMTP id t3so719672pjm.5 for ; Tue, 16 Feb 2021 19:12:33 -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=FHD1ZHIhc4WSJNyR0imAZzpPRVMfH27lnBV9YCusvPQ=; b=eMK2Jd3YX/2OyQ4TwaGlHAIqsAQNi8AJRkybRDWs8/g4ztfXyvXuWPOmzM/xMd4r38 jLK3HywO/5D2AN/JdT/TVUwM/u+CVvKne7X+MCeUv0V3n7bYboOmOPs9S3Rii3oOCDtI onaLrcFST8e9DLDNaoHYM8Xo5ZGbRhmURtBGCrlPQcrSn/5q1gxvWupTATqH62mDTD6f P/LgOb6UjbTM3E1GPIhchCbn9FkUShQOUHNcLbS02rOgImnbVic1xDSd88RMZG39Vc1f RDAq42Q1BG0y7rWy3cS8bKb2ymO9Kp5hKnox+vGjdbFlO79Wc6zsuvvxHbLG2nx92fiq vE0g== 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=FHD1ZHIhc4WSJNyR0imAZzpPRVMfH27lnBV9YCusvPQ=; b=e5xPsvQToNqhFMCLrGc32whjlwe7q8Fs5SIGPBf6gwAQncpTIvaXUX6/mbcxxrVSM4 k9ek5v8GFMLt5KzPjlYtEt7OOsLxGhU22EdpKdUqzaK3ezd7VseBvfQzzcvx2NfuHk0a 7OhjsLW3Lcq3maOcxlBUiSSCfjBaClhfv7/o82RI4VJJHuYKK/pbO2RIv1/NCzSKgwoY Y9CX2qsDMkWCJHd9uFpvzeitgizpN1n++qK+6/g1HKNBGmIT2jSCyFqAocXI7MqjiJ7w Qm+sfzLcJfWBYnwVNNjdf9DjGRe1BO4r1bn/xmBCkND8Sw4nw8bh3g1tPR6hHVq8Syuh Oygg== X-Gm-Message-State: AOAM533ys/+mC3K0v0lmdpanmS/Ytq5vX6JTDlRjdWVxwA7hSYKOJCsp LHULKd2VW+oyKcfYDalpnuasr4h1rbcH4r6/ubMK3dGOKrytuyTPKrpg7XGraNMFqlBfwguT/Hx e/tpmwc63yKeZFuIMBfM1mhdGD23BhAyyzvKzNJxtEv1kkwG9sIbMqg9oKNwnBoI= X-Google-Smtp-Source: ABdhPJytiFYoMfN7/kv+vd4BlQyY0NRVqQO0PZhLOMYSqKx7Kw4yylDDFP810WbKpFFKHRdFRmKoK7jdAM8= X-Received: from wonkap.kir.corp.google.com ([2620:15c:17:10:ed38:67:5a63:82cb]) (user=wonkap job=sendgmr) by 2002:a63:c44d:: with SMTP id m13mr22071768pgg.64.1613531551176; Tue, 16 Feb 2021 19:12:31 -0800 (PST) Date: Tue, 16 Feb 2021 19:12:29 -0800 In-Reply-To: Message-Id: <20210217031229.3124071-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 | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/libavcodec/libvpxenc.c b/libavcodec/libvpxenc.c index 284cb9a108..b552590b7b 100644 --- a/libavcodec/libvpxenc.c +++ b/libavcodec/libvpxenc.c @@ -1595,15 +1595,20 @@ 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) { + av_log(avctx, AV_LOG_WARNING, + "Error in parsing ref-frame-config. \n"); + } else { + 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); } + 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,