From patchwork Tue Jan 7 13:55:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17243 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 13C8044AC83 for ; Tue, 7 Jan 2020 15:56:27 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F1AA768ADD1; Tue, 7 Jan 2020 15:56:26 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f67.google.com (mail-wr1-f67.google.com [209.85.221.67]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EDF3668ACD3 for ; Tue, 7 Jan 2020 15:56:15 +0200 (EET) Received: by mail-wr1-f67.google.com with SMTP id g17so54007138wro.2 for ; Tue, 07 Jan 2020 05:56:15 -0800 (PST) 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 :mime-version:content-transfer-encoding; bh=7/ZsB0VHH8stEEA9Zgh9Knmfpoxd2+ztisGKBIJKOgc=; b=RpRL5U21U8Qa37y4Z6e4apczAoZzpRc8ujtZmzAnibR59KsUUy8YD8E3lgoDB/xQ0D LOwbaE8W4dvsAI7MDnrMdUqlT2aX56dEWHCxMIwL/tM/TJtYhisqZvdnuAAhmynu9yE3 AEoMEKRj4aTKk312m0XrySG3iPlNIl3XAXlvx48g4uAyD3sCAvwxNd+ml2aUnQ4989Ot aRdZS/okAwHzuezHBiBjELVrXnbXZCXdZJ8UH7Ahjl1XU281PxP3yMznmNZz5dQLUcPP vYJOSqVt/OZG1Bd7BgzqhzoITZGS3gFSsxNrjYVmdRW814/DYCO1us75imgPTmPHjiMv NTmA== 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:mime-version:content-transfer-encoding; bh=7/ZsB0VHH8stEEA9Zgh9Knmfpoxd2+ztisGKBIJKOgc=; b=uk6sV5XJUNm0S07La7t9YyO4QSgeGBUgat3MyHl8am2NewD38AO5ohtYO4QXMLPYRC BPvU1JOK6j4X3d8wgB0LgeCzqbvZ0+Rs+AnzkHxyh8Z/iBUKRTP8B+3UTn8M/1c7VgCQ d8OM6pqq3Q379acWxtKqT43FbBtvPskDsB9BC7MFp4U9Uamx3EL9mVNqrjnNvNwM4UYW 5Rq1RBMWebhe+6rzWv6qPeAiw9b7u3MeFAWdXuyNwfQKJ4bt495Jfzg86K8uW81vUrax 9b5/709TIAa6f8SOZMXgs/7VA3N6qGWJZulILoZl5gR6dZ53vc/ZSW38JZeVIzOjAm1b mcOw== X-Gm-Message-State: APjAAAWlWE1h4ic2j4ymu4Gxh8E/X4BRzLvwBDytbTbiaExoz+P7ICON MQxnZrO3EmFJyX6cz+AsrvqIYJGG X-Google-Smtp-Source: APXvYqxf9gKudYU/dz+d1JBJy3GRYr+KrScfPKTxSV9JAs6qBX3TzMZTpexcj7SQEIUlcNSt3v2zgw== X-Received: by 2002:adf:e812:: with SMTP id o18mr105174484wrm.127.1578405375333; Tue, 07 Jan 2020 05:56:15 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc08bbf.dynamic.kabel-deutschland.de. [188.192.139.191]) by smtp.gmail.com with ESMTPSA id e18sm76167730wrr.95.2020.01.07.05.56.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 07 Jan 2020 05:56:14 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 7 Jan 2020 14:55:47 +0100 Message-Id: <20200107135549.22581-9-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200107135549.22581-1-andreas.rheinhardt@gmail.com> References: <20200107135549.22581-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 09/11] avformat/utils: Fix memleaks in avformat_open_input() 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" A demuxer might have allocated memory while reading the header. If reading the header was successfull and an error happens before returning (e.g. when queueing the attached pictures), the read_close function would have never been called, so that all those allocations would leak. This commit changes this. Furthermore, there would be even more memleaks if the error level was set to AV_EF_EXPLODE in case there is both metadata and id3v2 metadata. This has been fixed, too. Signed-off-by: Andreas Rheinhardt --- libavformat/utils.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 2470a6ac0e..cf7dabefbb 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -642,26 +642,28 @@ FF_ENABLE_DEPRECATION_WARNINGS level = AV_LOG_ERROR; av_log(s, level, "Discarding ID3 tags because more suitable tags were found.\n"); av_dict_free(&s->internal->id3v2_meta); - if (s->error_recognition & AV_EF_EXPLODE) - return AVERROR_INVALIDDATA; + if (s->error_recognition & AV_EF_EXPLODE) { + ret = AVERROR_INVALIDDATA; + goto close; + } } if (id3v2_extra_meta) { if (!strcmp(s->iformat->name, "mp3") || !strcmp(s->iformat->name, "aac") || !strcmp(s->iformat->name, "tta") || !strcmp(s->iformat->name, "wav")) { if ((ret = ff_id3v2_parse_apic(s, &id3v2_extra_meta)) < 0) - goto fail; + goto close; if ((ret = ff_id3v2_parse_chapters(s, &id3v2_extra_meta)) < 0) - goto fail; + goto close; if ((ret = ff_id3v2_parse_priv(s, &id3v2_extra_meta)) < 0) - goto fail; + goto close; } else av_log(s, AV_LOG_DEBUG, "demuxer does not support additional id3 data, skipping\n"); } ff_id3v2_free_extra_meta(&id3v2_extra_meta); if ((ret = avformat_queue_attached_pictures(s)) < 0) - goto fail; + goto close; if (!(s->flags&AVFMT_FLAG_PRIV_OPT) && s->pb && !s->internal->data_offset) s->internal->data_offset = avio_tell(s->pb); @@ -680,6 +682,9 @@ FF_ENABLE_DEPRECATION_WARNINGS *ps = s; return 0; +close: + if (s->iformat->read_close) + s->iformat->read_close(s); fail: ff_id3v2_free_extra_meta(&id3v2_extra_meta); av_dict_free(&tmp);