From patchwork Sat Dec 11 18:40:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 32296 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:cd86:0:0:0:0:0 with SMTP id d128csp3357702iog; Sat, 11 Dec 2021 10:41:45 -0800 (PST) X-Google-Smtp-Source: ABdhPJzJ3XML+kwpH7BSliBJPd0YFv95LToCZDYQZnOIniakoqxTvPSZ5v9EoKrUaB9fVTp5qkqb X-Received: by 2002:a05:6402:b23:: with SMTP id bo3mr48057997edb.366.1639248105143; Sat, 11 Dec 2021 10:41:45 -0800 (PST) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id pg19si8417306ejb.180.2021.12.11.10.41.44; Sat, 11 Dec 2021 10:41:45 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@outlook.com header.s=selector1 header.b=W+ZjL33h; arc=fail (body hash mismatch); spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=outlook.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8727568AF50; Sat, 11 Dec 2021 20:41:00 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2062.outbound.protection.outlook.com [40.92.89.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AFE9C68AF21 for ; Sat, 11 Dec 2021 20:40:58 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ALRLYsK5ZHxGFkD363BPPJU+IX80AsvYxGNpCPNkoypXVva1MaU2QnDF22HrQMsmFhgGlV3XXYkAG0cLXGhLDtO9AKXzxOnuJx/JaRl4KEuR0nVCcXNlujAxxTfD0taZJsZoiDPz4iF3zNuWxDnIEw1JmKcDTyWHhuIwuO2TtDQnckeQodLKZUAKXNmACY2AGbChH5e5FJ035bNp9f532mZ/MMo8Tfiw0G/2xnP27FEdGmQhwU/8JjZQc8HdcBBlHS9Uf5dVSwirdhcgGUmzKvuDRA6As1qtZzCsbGdtv6f5EC4AYYVeh3ECMG/5M/jBOXn73NVjOeNlrj+amNirYQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kTRRU9r4K3J/wd3Be7rKHP/8zcs6vFIB+DCsb1LrgZo=; b=UeUENB2Nu8bp+GSim9iNnUS9tT99Jw7E5pTt4EGd1bKrqCvPmPOnLGwk+PUwnGsNR8gV9b3iOU1A0/ZSYM+DrixzxitLrTMG8jp7wgSf59AcuerVmnV1q+QefTvcGOmqCeXhSLHOkvq4ShnVNfmqxuNvP+nagB79cuGC3lCPEw/AYyQkWAEmzRJJ8FjGCqEu0yNvBHEn1WaiPLixPjrE+wKrVA6swq1M3ccLkY+FcbvD0HWwfYRcTKIRMCTuIe5oeO4YcC+qUM4ihjwNF3UNht2jPYMLe/Hhx8zedjWXWAgRejaKNGGpXnuoLAQMABSMNGHwVj7Iw222NrIfFaQ/7Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kTRRU9r4K3J/wd3Be7rKHP/8zcs6vFIB+DCsb1LrgZo=; b=W+ZjL33hq9GA7QL6qpT1I41aww+8HzgyE2pdOqH0PeZFTW2LsZK73LzFUeIu/fNSbqoq30Q1vc0nA1VvXd84NQoVc4K/ELm1IKP/A9sun33lgbvA60b/P2pesLR7nHBa5KcL3wcURv+T34oU8SCz2/jLx8sPSDZcbJmHaFPMCxM/KGlsJv3/gaSfQvPooNvqCKnE0spM1D7Ckgax6GNwwGMMfu3tBpDilFHW1oWeOYPhehOKrFA+JlM8BKCcFkCu4oKdxGQMy1/I1E8JHb0aMUSMrgN/ka/1KGMB19YwGDkCwuZQ2bEI72P7fnWZJqQjnMHqDU/QfdvjSNRUrOdMpA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM7PR03MB6450.eurprd03.prod.outlook.com (2603:10a6:20b:1b2::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Sat, 11 Dec 2021 18:40:57 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::f0dc:92f5:6bc2:45ca%6]) with mapi id 15.20.4778.017; Sat, 11 Dec 2021 18:40:57 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sat, 11 Dec 2021 19:40:21 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [3KOIfOd8IXhRApG4mtimisroqzOlOHzt] X-ClientProxiedBy: AM4P190CA0008.EURP190.PROD.OUTLOOK.COM (2603:10a6:200:56::18) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <20211211184025.1430779-7-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 08c28d14-5759-4c3d-6b93-08d9bcd5c53c X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiS9msLST/hR/FDB3IPfXlmiPtrPivb/a0AzG43Txxg1j8CimVE7Ptz9IwsDau63fc7cnZLUcEYGrBpa8HrHgoLGzVpvHOFsqLSfvBYWz2mopXST69Wd5HMFiMH2yJpmlva73LnXvbq/5yI7LottvNmPshsoZmaZjAtkUCfKOWmlHf+5GYqZkemxbTlVVNh0bcIy/fK0db8ryneGdbxgi4Xt1F+UHRyKaNjhSOS2I1LJDQ5zGd9lF96nHfE/ZNy9cbJPOPPgIVBgCE0fiH+XMH0Ym4i1nZdvnVoCG2sWUE2sHt3+XCK3+BJHdEPF3pwOJEnudi8E7Jec1wtgfyn1y1Da9YQB0+IrwRfju4aK+t+d8PWOHeZZqxSjZd4TQI0KyrQRSC+TlOhgUwL4V0J/bRDd4cYQBXbIRDnig5JDJq3NyfMv/lHsw4ugM3e+J2xMiwpklDzlEWExiHL2IZ9+xMEvS1gwNSO7ZvSxmm6iCFoXTWiC/dvplZUikMEEn5US0zSvX3Im8ijr1sTtezjYhJsHRaLZLziXmQQsDsR9OD4zN8d7nNGM2wlEuIJmI+seE9wsTD3oaF1Gcqk4JBkjVqb15UmT4iEH2Xcu07/uZIyrx2POgN6MRCXxjKCgyF6uNLOawrSm0zrgYUMREgsGECWP2BIsTKuQRnO+7+JmgActasBN/As5P7EiAXfH3Cv1Ff1Fl4UNryc5PW89g3tLFgAhn+yHSktEpyMX7rDioLZeN+4oIGjA626ZHOMFiWTYo2A= X-MS-TrafficTypeDiagnostic: AM7PR03MB6450:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: XGHpbSF0Qmr55ma39qCNFeCMYIpsoTuHCg5TCiP7s5yrhhFNvbmRwIMimOi5pZyYcqFgY96vTBsnFz114yfq3OF+53iCGbC7T6+t5B8iUjXbs6qzGpJeXq+4vUfzMlDhrnaEDadRSddUH5mGbglTcoTM5q+QEtkfv/zH2ZRFKCy3Pu6+YJGx0qbu361uKc4uouge93BW9xDqGFJF+wAG+/ByPqPqzb5U5E9M2+ombc7EF+Qz2me+op3iKQ7/lkZ9R7BeY6cMfVn2a/e7jj6R/9NnNHriqlGlErcxic/5wv6n9uTNaBID4bmDapVC8mu9fqqqqZ6qBogUT0PmKF3i4PGPKAIt1O2jkETaovor2bsWL8+rRSrlzkVz3ggbgJ/GYHccMBwWO0svMO4ygvIfuZSS6//5EgVISLGjA0r4uMuxyFUMjyWa1TOqtoiewBIGzIxAuFmsKe1T+O6WOYSIpiOox2TCppnpG/2lKY0JrEeaiiYLsf1KSYwKeKHJ9lZ2UT89cz8jNRGRaKWpSlUnCBlxk0J+SSVWySdRnKQ+/57NQ/1+XLGMA0+H8nz2NjpgHKLXW4djh0Z9dWVau5Zhfg== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lFm6EC6X7pg+GiGyEDqAMebZ/xxKeUeYI/PrQWw/PuCIYoz39bAJSLkkjBgptSjEiIShwAFMvG+sy3QLAokf7JozJlp6xG6ptVAxWNPaUWuvEHLctDB9p0G4EuNWxIoPL3G5AmPTX2GL8XrEUCCrCPpHEeFB/tYRE4Cu4xOHEKEIv4ms6KCG60xJ4w94CWvzI3Hx6su6nGkZ6BJO0x3w1OEDpRPGAcnuSxG5gK15cR/ayKo8CQuHwvHhbZTzeWnvSHDP7zPU4JEI2eDK5M2W64SwwSAWLlM/4otlq2BSvU6jVztuhALZDuw8Ow/Z3KvQTAyb0AvdrrhBdZLNGQ/6JkjFLejyP0u/UTaXNsk73JD0bHp6M5aibg93dZGqgCVV2IfB+iflYlxM64T2GowFK79kuRBxhnpeHZoG+NHaOkFSj4Nx2WaGrpr0mKNTglgCFtD46gpy1EYpLwgfoaC2lo5PteDsGYvwvG431jND14Ma+VbtItYWrl2/HDJU2rwv05XmBDUjePLfUBEcAFXHgEfH+bqAqXIMt7/FxT3Hyq3tY2OW/7MOyH0myY6GZ1RYQnpEb+zVOPiuOAdEXTLoWiGs91XoQrS8FO1E6uoYQDsprdY4HfqEQ3x9bHsv5PwB5W3eoQEdczrLIdM4VQTZSC8MYNBKH7SLvhhLH7yvuVo+Cddk+zZV1GQ/YJnsa6t0meZVFn/E6bJbZrKphtKFXEgWpck2xp+vYl/MG1l0GppKUPRrm787kXtaSA6BNHYYo9TIHah/VHSGrkqM/Z2ZP+NaJE49zh24zXFRJYjJC69sQDZ4aV64DwjKTX3RxKrTAvOW+Ko9fTxS26Feik6TbWesX0TVjtittFtLu/mmkY0rbLEVwOD/WJzaCeJSPBC98DeWDKek6bXFszIqlMFC8f06SlYkNcBbggEXDI6Gym1NqPXmMBu4oWDDkjN4x3UEGivMjF8TvPopGGxN4qALRA== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 08c28d14-5759-4c3d-6b93-08d9bcd5c53c X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Dec 2021 18:40:57.4481 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR03MB6450 Subject: [FFmpeg-devel] [PATCH 08/12] avcodec/decode: Fix leaks upon subtitle decoding errors X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 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" X-TUID: WUqcu3FFZtz/ Up until now, various subtitle decoders have not cleaned up the AVSubtitle on error; this task must not be left to the user because the documentation explicitly states that the AVSubtitle "must be freed with avsubtitle_free if *got_sub_ptr is set" (which it isn't on error). Leaks happen upon failure in ff_ass_add_rect() or in ass_decode_frame(); freeing generically also allows to remove now redundant freeing code in pgssubdec and dvbsubdec. While just at it, also reset got_sub_ptr generically on error. Signed-off-by: Andreas Rheinhardt --- libavcodec/decode.c | 13 ++++++++----- libavcodec/dvbsubdec.c | 2 -- libavcodec/pgssubdec.c | 5 +---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 52bf5dcd33..afe2c0c3c1 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -834,8 +834,14 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, sub->pts = av_rescale_q(avpkt->pts, avctx->pkt_timebase, AV_TIME_BASE_Q); ret = avctx->codec->decode(avctx, sub, got_sub_ptr, pkt); - av_assert1((ret >= 0) >= !!*got_sub_ptr && - !!*got_sub_ptr >= !!sub->num_rects); + if (pkt == avci->buffer_pkt) // did we recode? + av_packet_unref(avci->buffer_pkt); + if (ret < 0) { + *got_sub_ptr = 0; + avsubtitle_free(sub); + return ret; + } + av_assert1(!sub->num_rects || *got_sub_ptr); if (sub->num_rects && !sub->end_display_time && avpkt->duration && avctx->pkt_timebase.num) { @@ -863,9 +869,6 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, if (*got_sub_ptr) avctx->frame_number++; - - if (pkt == avci->buffer_pkt) // did we recode? - av_packet_unref(avci->buffer_pkt); } return ret; diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c index 81ccaf4c57..bc741a1de6 100644 --- a/libavcodec/dvbsubdec.c +++ b/libavcodec/dvbsubdec.c @@ -1715,8 +1715,6 @@ static int dvbsub_decode(AVCodecContext *avctx, end: if (ret < 0) { - *got_sub_ptr = 0; - avsubtitle_free(sub); return ret; } else { if (ctx->compute_edt == 1) diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c index 8a200aa01b..bdd20c914b 100644 --- a/libavcodec/pgssubdec.c +++ b/libavcodec/pgssubdec.c @@ -667,11 +667,8 @@ static int decode(AVCodecContext *avctx, void *data, int *got_sub_ptr, break; } if (ret < 0 && (ret == AVERROR(ENOMEM) || - avctx->err_recognition & AV_EF_EXPLODE)) { - avsubtitle_free(data); - *got_sub_ptr = 0; + avctx->err_recognition & AV_EF_EXPLODE)) return ret; - } buf += segment_length; }