From patchwork Fri Mar 27 09:55:55 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18422 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 6690C44AE5A for ; Fri, 27 Mar 2020 11:56:49 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 44C7068B578; Fri, 27 Mar 2020 11:56:49 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B9E1368B436 for ; Fri, 27 Mar 2020 11:56:43 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id c187so10783487wme.1 for ; Fri, 27 Mar 2020 02:56:43 -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 :mime-version:content-transfer-encoding; bh=g2YXaiPyHjdU1nfTx1CglcL0NM6T3+b9js5mbDwmC7A=; b=M11jX9qUVtuBIsufqHAVnPFw3xPrRGQ5CWS2macqDAQK7yH9GiUbpYsffkl9BFxGft 2m7leJPypYLsDwGFc4nfI02LrioLo9LPT67GJcB9n/13IRS4IZX5z9PLhce49nKtJoSb vIJ4AYQ9wLZlyQzSu5CdGj/23BH3DnSU2yg5txr2CT1IdEAW/AjHcL35qw0KyKMS5ps0 b7SpST545JLzbn9o9+icy7wvOHTuQegOyfaI8GgXNJ7qYmOzc/0dYj8AFic/je36YC6a rdNE5nvwVQlSUfrvxl10jOu9nn8HSrn2rffDE9jb0MnzV9iyn7GtVYF33UKvjCvyL1Sn eTJQ== 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=g2YXaiPyHjdU1nfTx1CglcL0NM6T3+b9js5mbDwmC7A=; b=NP+KDLiE1TM6ncWXx4AVG2q0F2ZpH1VKdR12dWMnPqPdYz+2rX+1Y52iZcVorQY5LY P5Dbc6gafdbzNHo5YZkPnwOWylpenl4r0+YJhPrRNPxX658uScyYfAUsC0Ypuv0Y/xDV iDiqQr09qcJhqgS5AROZyE0UAWufEvPJAvDarIC3aKmWVCfuJXM+jaF/s98tIsNRnCMt 1mm1ndr98K6yJTjeS+vIMEqd4AueMqw+ZaoCJthPe1B4TU3y5K6Bqm7k+k4EEu0spfBG jAGSgj9TqGwX2hpAskJxci+iAcOCPzD4uufPtGJKrilFpi34tU57Iz0bBzAYrspmUz1+ 1wEg== X-Gm-Message-State: ANhLgQ2UUArgagJpxzuvwD6JLVLrxWJvSMf+F6MyZ6+S2Xi8twDzW3uU vFH/uHmGM2oLzwqCXeZnlLCZSWMm X-Google-Smtp-Source: ADFU+vvgZtDpvyGqeWSZz3GLILKs7G4JCPj7djsnO2E0WI8Tq3UNDCzg58jnX++CJNuLh9teao8UEA== X-Received: by 2002:a1c:9c85:: with SMTP id f127mr4682692wme.91.1585303002910; Fri, 27 Mar 2020 02:56:42 -0700 (PDT) Received: from sblaptop.fritz.box (ipbcc1ab57.dynamic.kabel-deutschland.de. [188.193.171.87]) by smtp.gmail.com with ESMTPSA id g2sm7931921wrs.42.2020.03.27.02.56.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2020 02:56:42 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Mar 2020 10:55:55 +0100 Message-Id: <20200327095557.24069-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200327095557.24069-1-andreas.rheinhardt@gmail.com> References: <20200327095557.24069-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/4] avformat/avidec: Fix memleak when DV demuxer is disabled 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" If one uses a build without dv demuxer, an AVIStream struct that is destined to be used as private data for an AVStream by the avi demuxer would leak, because it has been moved from the AVStream (that is going to be freed) and only stored in a local variable (in order to be used for another AVStream), but if the dv demuxer is disabled, the earlier code returned immediately instead. Also return a better error code in this scenario (instead of AVERROR_INVALIDDATA). Signed-off-by: Andreas Rheinhardt --- Like lots of other parts of the code, this also relies on the compiler's ability to eliminate dead code; otherwise linking would fail because avpriv_dv_init_demux would not be available. libavformat/avidec.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index ae343e732a..18402f0032 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -599,15 +599,16 @@ static int avi_read_header(AVFormatContext *s) handler != MKTAG('d', 'v', 's', 'l')) goto fail; + if (!CONFIG_DV_DEMUXER) + return AVERROR_DEMUXER_NOT_FOUND; + ast = s->streams[0]->priv_data; st->priv_data = NULL; ff_free_stream(s, st); - if (CONFIG_DV_DEMUXER) { avi->dv_demux = avpriv_dv_init_demux(s); if (!avi->dv_demux) goto fail; - } else - goto fail; + s->streams[0]->priv_data = ast; avio_skip(pb, 3 * 4); ast->scale = avio_rl32(pb);