From patchwork Wed Mar 24 05:40:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 26591 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 9F5A044B89C for ; Wed, 24 Mar 2021 07:41:35 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8958C68AB0A; Wed, 24 Mar 2021 07:41:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5075768AB48 for ; Wed, 24 Mar 2021 07:41:27 +0200 (EET) Received: by mail-ej1-f41.google.com with SMTP id u9so30838487ejj.7 for ; Tue, 23 Mar 2021 22:41:27 -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:in-reply-to:references:reply-to :mime-version:content-transfer-encoding; bh=FknVd2UvUUy1KDIU+FvbZQ6pa8KEyZxZ1hjlDhsJyfA=; b=jf6yPbI2Ljpf3xHlXbTLpJSHWT+3qTvx7PhOmkMlOcawWSVOTN9ayh7ZE5lTfGWmrF VHxLIIgAkq9nxqW62IoTkUYnKhRYD10DwEFsJonVvA/ZAqXRSDjeJe+pyvZ6IbUtFSGJ L+FcfXsDDctbzWbwgLDvSFK944SHYaIpLWUVDmpswzXGrbViQncoAwsXOMF6aK6cwXnJ bCIgv3Zj7aC9wwqhCTSNrUjTlSyzsw89smUROJmV19d04WrrUKhVvlBCnLQs0T2OuRgl cukXjYytUuuhuKUZNiIaelioG50z3UQEX1fhYJkaxSiC/nX6HI8ndUfFqhFXVzCFKkKg fxNQ== 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:in-reply-to :references:reply-to:mime-version:content-transfer-encoding; bh=FknVd2UvUUy1KDIU+FvbZQ6pa8KEyZxZ1hjlDhsJyfA=; b=Ecq8cc3zbdBYDqCw+SHesX942SuwGW7NMT9Fnz1ER1R7NJF8A6FeWItOgJ28w0OAjt P/Lj9ILJbiMfPEYIMzHbjXcJEeACxsKXMWKrs2SXHvY9TEwnat6iK+j1IV0GcYRfRUhA xeeK67Kvx3E4zF0q8XCKzQwdTGavDm1Fd5Q43RKLUoFtDbiPWL6RseOLb+7Y1kxxXopy Ifd8U4GWXzk8BN9bDTsUFrBejF5FfY6dOKzVSixGqm+VIq0UU8fMZcdmDZKWaghHWQ6O RBQ1V6EOg0ZEWZQ4KLLwsqK5XyOFqolDbcu/lYltuO/EEYxlaO9T9Wq7fo9w5Q1ZDcI5 6GMA== X-Gm-Message-State: AOAM530WZqRooHf0BYueaDgVuS6BndmaOs7R9m2/9l47leH1ZTEEitHn pNSD3EIqCQrfslB9czYziVdU8WJYTdvCMw== X-Google-Smtp-Source: ABdhPJzfLx39RjWnEy7pvSzTnbiE+9NL4X/F1zcpIjRHTX4vmAFipNzrTgZ48QFvaLf5bbPyVkVdjQ== X-Received: by 2002:a17:906:4ada:: with SMTP id u26mr1793696ejt.129.1616564486580; Tue, 23 Mar 2021 22:41:26 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc08960.dynamic.kabel-deutschland.de. [188.192.137.96]) by smtp.gmail.com with ESMTPSA id n16sm561041edr.42.2021.03.23.22.41.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 23 Mar 2021 22:41:26 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Wed, 24 Mar 2021 06:40:43 +0100 Message-Id: <20210324054043.1729328-6-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20210324054043.1729328-1-andreas.rheinhardt@gmail.com> References: <20210324054043.1729328-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/6] avformat/libmodplug: Fix memleaks on error 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" Signed-off-by: Andreas Rheinhardt --- libavformat/libmodplug.c | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/libavformat/libmodplug.c b/libavformat/libmodplug.c index 6e567f5f98..b85269341b 100644 --- a/libavformat/libmodplug.c +++ b/libavformat/libmodplug.c @@ -99,6 +99,14 @@ static const AVOption options[] = { {NULL}, }; +static int modplug_read_close(AVFormatContext *s) +{ + ModPlugContext *modplug = s->priv_data; + ModPlug_Unload(modplug->f); + av_freep(&modplug->buf); + return 0; +} + #define SET_OPT_IF_REQUESTED(libopt, opt, flag) do { \ if (modplug->opt) { \ settings.libopt = modplug->opt; \ @@ -168,6 +176,7 @@ static int modplug_read_header(AVFormatContext *s) ModPlug_Settings settings; ModPlugContext *modplug = s->priv_data; int64_t sz = avio_size(pb); + int ret; if (sz < 0) { av_log(s, AV_LOG_WARNING, "Could not determine file size\n"); @@ -221,8 +230,10 @@ static int modplug_read_header(AVFormatContext *s) return AVERROR_INVALIDDATA; } st = avformat_new_stream(s, NULL); - if (!st) - return AVERROR(ENOMEM); + if (!st) { + ret = AVERROR(ENOMEM); + goto fail; + } avpriv_set_pts_info(st, 64, 1, 1000); st->duration = ModPlug_GetLength(modplug->f); st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO; @@ -235,8 +246,10 @@ static int modplug_read_header(AVFormatContext *s) if (modplug->video_stream) { AVStream *vst = avformat_new_stream(s, NULL); - if (!vst) - return AVERROR(ENOMEM); + if (!vst) { + ret = AVERROR(ENOMEM); + goto fail; + } avpriv_set_pts_info(vst, 64, 1, 1000); vst->duration = st->duration; vst->codecpar->codec_type = AVMEDIA_TYPE_VIDEO; @@ -247,7 +260,13 @@ static int modplug_read_header(AVFormatContext *s) modplug->fsize = modplug->linesize * modplug->h; } - return modplug_load_metadata(s); + ret = modplug_load_metadata(s); + if (ret < 0) + goto fail; + return 0; +fail: + modplug_read_close(s); + return ret; } static void write_text(uint8_t *dst, const char *s, int linesize, int x, int y) @@ -332,14 +351,6 @@ static int modplug_read_packet(AVFormatContext *s, AVPacket *pkt) return 0; } -static int modplug_read_close(AVFormatContext *s) -{ - ModPlugContext *modplug = s->priv_data; - ModPlug_Unload(modplug->f); - av_freep(&modplug->buf); - return 0; -} - static int modplug_read_seek(AVFormatContext *s, int stream_idx, int64_t ts, int flags) { ModPlugContext *modplug = s->priv_data;