From patchwork Mon Jul 20 06:15:43 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 21197 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 27D08447BC6 for ; Mon, 20 Jul 2020 09:16:00 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 03E7268B994; Mon, 20 Jul 2020 09:16:00 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ed1-f67.google.com (mail-ed1-f67.google.com [209.85.208.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8E48E68B8B9 for ; Mon, 20 Jul 2020 09:15:53 +0300 (EEST) Received: by mail-ed1-f67.google.com with SMTP id d18so11905386edv.6 for ; Sun, 19 Jul 2020 23:15:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=czVRq/d/WDey0qx5kxUb3odzxXpBRO8UkjpdrGnRXNw=; b=Ia1ehJ8QTSC9HUs1/CfVmz9M1rQtO8ym3vUpQvbSoXPX8hTw5b1PaYWJqV3EL4LRws pJqcTy8tEJ5tYQzKzm8MQ/VTFVfWh41545SiCqAdqzCZIv4AjgDq3BpBtSRAErrs4pt0 ID3ZmbAHMPzph2pAlGrGSC6MXoqY5x4y/8m3uH2yAOY7+Q33uflB9Cc/YAY+a9jwpwYz 5GD/xsT9swyvdy2i3twuauyGiMZIerVv8H7xtXD7xhE7eywpx+iIywQuUyfW4S5HxBB6 WBu07eMmQbhY1AUrcH8x1WPd6Uqv4an1/sHFwfIa+DqZunlNlX2lM9fy6wQiIu2lTAob Q6QA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=czVRq/d/WDey0qx5kxUb3odzxXpBRO8UkjpdrGnRXNw=; b=TFi8Kt76gwnMfZZ+G456uNlZSUEO6yPBaadMbfZjrQ/F3rcpZmVSCve1jxdpwxrIM4 rp1rKJV1irgm+0F+U6JcMrzdjJ3QUh6JGgAE6FHP9hDkEozw5e0Lv6+KYNDPTEZn+hYD fCJlrQnnQELsW8fcsxVLKpgjZ/i+baHdr0qmq/yE7LNz2k5xd/26JKgYiKajfmUULGUm b6cXS6+nQI9yJW+cw0d1cUucwOLqoGsipKzIrjMI5DaoUd5e36rxf+HghPNx76FFywMU ilUxa1goLFNaVlv7tfI53dsCeizJtUO14wjoYuMGXzPLyfSD/Qtx6yGZtWxLOZsgtHQo RdQQ== X-Gm-Message-State: AOAM533tisChKcq1JYciXQVtt+w/3aYNjrDkpbGfadPMeh7VxEbB8nSm XjwSxm9Vk/YFeSrCnmk3HtlLzM6R X-Google-Smtp-Source: ABdhPJygizbjiaKN9RedmPwJRw0i7PevccUee0EJtKpg7yN8dnYoT2KTfRKlpoJh8vy2I8M8fJLEkQ== X-Received: by 2002:aa7:d88e:: with SMTP id u14mr20314847edq.11.1595225752655; Sun, 19 Jul 2020 23:15:52 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc10296.dynamic.kabel-deutschland.de. [188.193.2.150]) by smtp.gmail.com with ESMTPSA id y21sm14044773ejo.4.2020.07.19.23.15.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Jul 2020 23:15:51 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 20 Jul 2020 08:15:43 +0200 Message-Id: <20200720061545.18854-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/3] avformat/mxfdec: Fix memleak when adding element to array fails 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Said array contains pointers to other structs and both the designated new element as well as other stuff contained in it (e.g. strings) leak if the new element can't be added to the array. Signed-off-by: Andreas Rheinhardt --- libavformat/mxfdec.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c index 90546d42b3..08ad92cc0c 100644 --- a/libavformat/mxfdec.c +++ b/libavformat/mxfdec.c @@ -822,15 +822,17 @@ static int mxf_read_partition_pack(void *arg, AVIOContext *pb, int tag, int size return 0; } -static int mxf_add_metadata_set(MXFContext *mxf, void *metadata_set) +static int mxf_add_metadata_set(MXFContext *mxf, MXFMetadataSet **metadata_set) { MXFMetadataSet **tmp; tmp = av_realloc_array(mxf->metadata_sets, mxf->metadata_sets_count + 1, sizeof(*mxf->metadata_sets)); - if (!tmp) + if (!tmp) { + mxf_free_metadataset(metadata_set, 1); return AVERROR(ENOMEM); + } mxf->metadata_sets = tmp; - mxf->metadata_sets[mxf->metadata_sets_count] = metadata_set; + mxf->metadata_sets[mxf->metadata_sets_count] = *metadata_set; mxf->metadata_sets_count++; return 0; } @@ -2780,7 +2782,7 @@ static int mxf_read_local_tags(MXFContext *mxf, KLVPacket *klv, MXFMetadataReadF avio_seek(pb, next, SEEK_SET); } if (ctx_size) ctx->type = type; - return ctx_size ? mxf_add_metadata_set(mxf, ctx) : 0; + return ctx_size ? mxf_add_metadata_set(mxf, &ctx) : 0; } /** @@ -3083,10 +3085,8 @@ static int mxf_handle_missing_index_segment(MXFContext *mxf, AVStream *st) if (!(segment = av_mallocz(sizeof(*segment)))) return AVERROR(ENOMEM); - if ((ret = mxf_add_metadata_set(mxf, segment))) { - mxf_free_metadataset((MXFMetadataSet**)&segment, 1); + if ((ret = mxf_add_metadata_set(mxf, (MXFMetadataSet**)&segment))) return ret; - } /* Make sure we have nonzero unique index_sid, body_sid will be ok, because * using the same SID for index is forbidden in MXF. */