From patchwork Fri Mar 27 09:55:54 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18421 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 3472F44AE5A for ; Fri, 27 Mar 2020 11:56:11 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 0FEEB68B50F; Fri, 27 Mar 2020 11:56:11 +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 5802E68B48E for ; Fri, 27 Mar 2020 11:56:05 +0200 (EET) Received: by mail-wm1-f65.google.com with SMTP id a81so11604004wmf.5 for ; Fri, 27 Mar 2020 02:56:05 -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=iopysB0+vp65l0m0FsAQGfL6tbdLBxBoJi3Erp7vy6k=; b=Qf5h/3aiQhWub5/qfwZ46fF1aJsR8Umbhar7j5FaNZ+1IokHQNyXUXIJ3FYkns0vD5 IwXchEhXnVlV7VPu3cm/2xD5qpP2cUgz4WqyptYR7ICq9CqpmqFBDVILa6RUhuSVnhRp TGOCPErEatFCxGyYR/8OB4ujmhLLNe5BH52vm8lCY//Ervo45++r30BLFcm5zro9Oo4i QlXgEYU87q3NDyA98dNoczx34nfrNELFnLaWhCTe/0IDFAAcf/OejwpJ9LxpD0cgr6sc JF6ADJdJyNmPpcDWgTs0pGXEWbLVSXmuVXjFwlNmVn3jdxQGvaBBw/MJY19AxI0cDiVX Az+Q== 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=iopysB0+vp65l0m0FsAQGfL6tbdLBxBoJi3Erp7vy6k=; b=s4QvRoIWOXKBS40B+hgAImN3FcNsUzVPn77yRJIQCiwIjmCusAwH5BP6es4moGlJhL SBBvI+/DzRmxc4PHrxw/Qj/zRgNWHMwxOfY1BrSEwgtY2V4lSHunDFelk+Yo6uT7UpXw e5XtPgJ3j1BqIrCd+EvxDIkEGmMHjaTilsp/2DAcRGToXEwI2Z7KTYkWuKoRMuueRee6 PFx4AIUiSNjbud+J/beZZheDVtOeqJzM3MJFrAkANHrzcrwP2s1HfzPeAOBX7JZGONLG J+bULLO8I+M1srSOfB89iPlBUHF9nxfZPy17Ftmapfn6nCDKK29eukkslBakVMXdDWOt Y3Rg== X-Gm-Message-State: ANhLgQ0qqmDtkjiHW53YmCWxLTVSacgDjIHHihrjbKETBebK7zzTT7cc gFAwrZxArKLdTmv0mhxl0pbZAXIn X-Google-Smtp-Source: ADFU+vvw7vmm6yqTq+ZdVO/K4pZjoPvOwrRfuMtLt+Clykvx+XSmmGlI50mHPh4izttzLC+ZgGhzBg== X-Received: by 2002:a7b:c304:: with SMTP id k4mr4592526wmj.11.1585302964424; Fri, 27 Mar 2020 02:56:04 -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.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2020 02:56:03 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Mar 2020 10:55:54 +0100 Message-Id: <20200327095557.24069-1-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/4] avformat/avidec: Don't reimplement ff_free_stream() 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" Using ff_free_stream() makes the code more readable, more future-proof (the old code freed AVCodecContexts and AVCodecParameters and its substructures manually, so that there is a chance that there would be a memleak for some time if new substructures were added) and reduces code size. Signed-off-by: Andreas Rheinhardt --- libavformat/avidec.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 00c3978b2d..ae343e732a 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -600,21 +600,8 @@ static int avi_read_header(AVFormatContext *s) goto fail; ast = s->streams[0]->priv_data; - av_freep(&s->streams[0]->codecpar->extradata); - av_freep(&s->streams[0]->codecpar); -#if FF_API_LAVF_AVCTX -FF_DISABLE_DEPRECATION_WARNINGS - av_freep(&s->streams[0]->codec); -FF_ENABLE_DEPRECATION_WARNINGS -#endif - if (s->streams[0]->info) - av_freep(&s->streams[0]->info->duration_error); - av_freep(&s->streams[0]->info); - if (s->streams[0]->internal) - av_freep(&s->streams[0]->internal->avctx); - av_freep(&s->streams[0]->internal); - av_freep(&s->streams[0]); - s->nb_streams = 0; + 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) 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); From patchwork Fri Mar 27 09:55:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18423 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 66C7B44AE5A for ; Fri, 27 Mar 2020 11:56:52 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 50D2168B619; Fri, 27 Mar 2020 11:56:52 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C019868B58A for ; Fri, 27 Mar 2020 11:56:44 +0200 (EET) Received: by mail-wm1-f45.google.com with SMTP id c81so10742842wmd.4 for ; Fri, 27 Mar 2020 02:56:44 -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=E9irR0mrD/nJgfljdkZEgRTTFbImRwF2D4GfW3wcQlk=; b=ZmPC9dZayVvdc9Ccy47J9VclmTo79Wib48i33faE4NxZwgoe7idnVFcnKaaza6st8T JiKKLJNsZIwTBvF9WHNLXScA170LYkbP6dO3QlE4Qc/58U3F+/HHdUFUCnjbXs0Fnci7 gP5vFoNzg7tPNKKNQs9NqTZzeiRkkFBNyUBEKgKTcA9T9D3wb6Iaae+Pcy7vLEs0MOoy onTxy9R8Gqehd1h4P9aHJOJx8tW5RdrzpN0QVUiGhz2LEdWRFM4rxYUmxGODEdubuW/L wUUEj7EcfbI32fI3dpKVY+z8+mSe9/40uaMbvvAc4tirz/9vZh5LiNJSTf8Us4zZMcwk THmw== 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=E9irR0mrD/nJgfljdkZEgRTTFbImRwF2D4GfW3wcQlk=; b=j23c5wSWn7iWfJEIx4BfIee1Ab4IopjXLHtvtWHHvaJcO3fjonvVG1FyT2UiSdI4px pYwkrzb21Dcqnvu6tjw5dQjKDqlTlvcfB5fu7a56ioD44UbNBef7qxrlZPTGhHn1eQBj ukPeGd+YcppbpBiXZt8iivkccbvmm49tEdxZAkiXAdOWQ37+66LgxOwew22sVhNyDj4S C4tLBpYIO+1S+arxeZNXHTSmDw6q6Xn4K3EBjrxMmRQ7XFSxCV0mrXOu6z7lbMPx0Cnx PYGtL050R58a8qsi1xVxJl0en3h8Wn+47V5cFVHqVAKEZU84DHTIM2BqC2Iw00/GZ7i9 GEvg== X-Gm-Message-State: ANhLgQ0tiPNLfaWv8wQ/5LvmvFZhAk82VHs+FQ0o/f8eieqzw/DUELoM wyXNbVI8Ss0TleT5XwXY0vKe85jR X-Google-Smtp-Source: ADFU+vsiJ/EztWV8QIIjKDS2AImI6wgDZuyJ/1inJbBXKY0WUn8dv5UMObF2njvgTe5EvbEuvAzP3Q== X-Received: by 2002:a7b:c8cd:: with SMTP id f13mr4582253wml.138.1585303003869; Fri, 27 Mar 2020 02:56:43 -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:43 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Mar 2020 10:55:56 +0100 Message-Id: <20200327095557.24069-3-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 3/4] avformat/avidec: Fix memleak when allocating DVDemuxContext 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" An AVIStream (intended to be used as private data for an AVStream) would leak in this scenario. Also return a more fitting error code instead of AVERROR_INVALIDDATA. Signed-off-by: Andreas Rheinhardt --- libavformat/avidec.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 18402f0032..87298513c2 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -605,9 +605,12 @@ static int avi_read_header(AVFormatContext *s) ast = s->streams[0]->priv_data; st->priv_data = NULL; ff_free_stream(s, st); - avi->dv_demux = avpriv_dv_init_demux(s); - if (!avi->dv_demux) - goto fail; + + avi->dv_demux = avpriv_dv_init_demux(s); + if (!avi->dv_demux) { + av_free(ast); + return AVERROR(ENOMEM); + } s->streams[0]->priv_data = ast; avio_skip(pb, 3 * 4); From patchwork Fri Mar 27 09:55:57 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 18424 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 8F1F3449CE3 for ; Fri, 27 Mar 2020 12:47:44 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6BE0368B6DE; Fri, 27 Mar 2020 12:47:44 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf1-f65.google.com (mail-lf1-f65.google.com [209.85.167.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1FC7468B564 for ; Fri, 27 Mar 2020 12:47:38 +0200 (EET) Received: by mail-lf1-f65.google.com with SMTP id c5so7450667lfp.5 for ; Fri, 27 Mar 2020 03:47:38 -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=RGGtSdR9VHbstR6M+B26xFhNTaX+aWykYOy3b2FEt70=; b=LlyAchpehHSO1X+q5TNaTVxuR5Z19NMxajone8/UeHB4v8qmHh0Y/eGGRxBhTwWgYF Nik7REqci5SXhvgCkGVtPY0/7oHEvdeRiDqAXzezd9CNRiZVMTuz/q+4K1HVhHLFI3nk 2BWtecIWMu8o5GLSwIWCC8/wAuSbP/vYpQgSZQ4QMTK8VkYfTuXuhabAXrLv4i1CnNWm rsp+MUUo0LqSv195QDRe36K0PB53KShZrUccFo8sjnIqH/9XbOq2J9DjxVBGUGi6Uwrz EkyuDYiAUOQ8WoUV8pJkpdvG7Y4Y4tgYfo/4tl2IlcNmrP7Ela1DvqTpbpQRnLEdhUxV irOw== 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=RGGtSdR9VHbstR6M+B26xFhNTaX+aWykYOy3b2FEt70=; b=e+98HzXzTMBGypJNlCwAixljb82+VGl6DohEn6u5sxDbw5bfDH3aB0uqyStzlCsftT +ajZmcl+Yi4kL+3wtDYAFb4nwMVHychs5n86Bgy88Qr8NMaYDk2y0vJILfMxcrdqy0rw OCQQ9b/QxvT661ZOQXi0UrswruIijjiWClixzTJjp3G7a6VfPQtm+3CbXlv2F2lOSY3I d6n05ijRmKjeLLQK0dxmceG1O2y5nGKkbx9itpPaU/U4fPTYjjjGbIymzwRUnFHBLpKS siCMjPqHKHPUingDNe++ApOm/AeL3IBMAgCqcRykeCTIn57/Cys+AMpwyoM3iQfVjOke Z34A== X-Gm-Message-State: ANhLgQ0ckBXlLsGZDQFibOyt3jooXJBj0v2G1B1akn4VCpSZ2+yNlga1 huNs+zGU+PYJV35J7LmC8ehYLaA4 X-Google-Smtp-Source: ADFU+vutI5fVHN1tlo6di0D20fdgm6sUxMf0MuUs25BXL/SfxvfI2VwHpuFxwf6wJEH7NiQ5pDqZLg== X-Received: by 2002:a5d:6187:: with SMTP id j7mr14716653wru.419.1585303004840; Fri, 27 Mar 2020 02:56:44 -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.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 27 Mar 2020 02:56:44 -0700 (PDT) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 27 Mar 2020 10:55:57 +0100 Message-Id: <20200327095557.24069-4-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 4/4] avformat/avidec: Fix memleak with embedded GAB2 subtitles 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" The code for GAB2 subtitles predates refcounting AVPackets. So in order to transfer the ownership of a packet's data pkt->data was simply stored and the packet zeroed; in the end (i.e. in the read_close-function) this data was then simply freed with av_freep(). This of course leads to a leak of an AVBufferRef and an AVBuffer. It has been fixed by keeping and eventually unreferencing the packet's buf instead. Additionally, the packet is now reset via av_packet_unref(). Signed-off-by: Andreas Rheinhardt --- This is actually not the only thing wrong with these GAB2 subtitles; but it is the only issue that exists on success. (Actually, both the srt and ass demuxer read the whole file when reading the header and store the result in a subtitles queue; so keeping the data is actually unnecessary.) libavformat/avidec.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 87298513c2..5fc3e01aa9 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -60,7 +60,7 @@ typedef struct AVIStream { AVFormatContext *sub_ctx; AVPacket sub_pkt; - uint8_t *sub_buffer; + AVBufferRef *sub_buffer; int64_t seek_pos; } AVIStream; @@ -1116,8 +1116,9 @@ static int read_gab2_sub(AVFormatContext *s, AVStream *st, AVPacket *pkt) time_base = ast->sub_ctx->streams[0]->time_base; avpriv_set_pts_info(st, 64, time_base.num, time_base.den); } - ast->sub_buffer = pkt->data; - memset(pkt, 0, sizeof(*pkt)); + ast->sub_buffer = pkt->buf; + pkt->buf = NULL; + av_packet_unref(pkt); return 1; error: @@ -1909,7 +1910,7 @@ static int avi_read_close(AVFormatContext *s) av_freep(&ast->sub_ctx->pb); avformat_close_input(&ast->sub_ctx); } - av_freep(&ast->sub_buffer); + av_buffer_unref(&ast->sub_buffer); av_packet_unref(&ast->sub_pkt); } }