From patchwork Tue Aug 8 05:52:09 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43167 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:9329:b0:130:ccc6:6c4b with SMTP id r41csp2054507pzh; Mon, 7 Aug 2023 22:51:20 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH3trx1WcdfWBgvoBn/6R/3inqBSOa+Vkva8kzocc9+jFBuzAZOcKzKgoZ+GY2DvSPlWlBW X-Received: by 2002:a17:906:13:b0:99c:ae54:6654 with SMTP id 19-20020a170906001300b0099cae546654mr12114738eja.14.1691473880022; Mon, 07 Aug 2023 22:51:20 -0700 (PDT) Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id a9-20020a1709064a4900b0099bcb3ad50csi6455342ejv.504.2023.08.07.22.51.18; Mon, 07 Aug 2023 22:51:20 -0700 (PDT) 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=o02cIwDH; 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 0DAF468C639; Tue, 8 Aug 2023 08:51:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-db3eur04olkn2070.outbound.protection.outlook.com [40.92.74.70]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 2E0ED68C1AE for ; Tue, 8 Aug 2023 08:51:09 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UgbD/7Vnc28Wp8s0B60AN6I2F3Zgegb4YUJkCKTazQAel/keB+KizeUXaQJZv9MAbOqRsFzxAdm2vShBX5e9HlJRmsz0xphh8oBeiQYafFSq3ar/Y0yY/b7u4HkMIQtfbJ5bBSpLjz2XaTl+QISvEH96EYiEouhP/3ir+LWlH5eyPhuz0/EOo75jEkIz+tmNeDj7qIoGVXjUKBLZ/Ei0E4+KaO0UHjdoCvUqBdNHF27frNwqTD9f+Yoo1En98EcbhpqrF8E9qKSjj+CHEWRCLN6AwaJMrN7A0HNloGIZbsYhrH8bbmv4mnmu9nxo9itRmT2JJnqgmZBRyHMPGPk/rw== 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=Hb2zUKWqeVsCt7ORup2uYQd1duc64DWaphQPffawuq0=; b=NvX0stKmDSrf9R8nVW6mCj2eByBHMAIJGHK6ASjYm5E9lFV6YcVhyK3B9zMOypH4Uok4pbOzf1Ga0CbqidArS8WR449E06ax4dE3CZ1QjtU4rs3KwTOy7OEPetR02Vphmm9k1G3n1mmkPH7dbqKQgtctLAKZ+Txpuet6oRHQNWsYo5Y8LAlOBLb3MmRprxJYitdGdlIM+ayuGlSBJ9KnpTR/8haj7yPrWzjaHwZFfU6PrsnW1lR9qztk4IYGGA9JkgnzTyEi8NxMCyvK3N8Bfkx7FxMP/qnpmjQvYDb5d4VdZaId08TaDOBqHVcqeNg9Va46y7qD3h1pxfIzMfaieA== 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=Hb2zUKWqeVsCt7ORup2uYQd1duc64DWaphQPffawuq0=; b=o02cIwDH30DdADG/n3/aqh9rZM/6ShtWYEC4ndIMKv1nGK8VfwKDHH3recvBhnQDHGqTfK4cA3myZzUgl8VSjkVDqNudpXlnduu2qhYUxh4zo1XqqlJe/+XroGVwrhT/SZ8yIgLJp3vbAAGankvRLkHpzaA/8vK+fekXwRNIDC1sr4xEstksKj4LjvX739d5tsSIfNeXYHbmaTz2UJ67lHKE9IJCMUfvmIUk5seE+9Ws0uo7pghdlmJrYbTHo9wCYIKXJ1KCle+rtrbIHtDFEoB3IKx8Z/ao5CTPdshocTpBChWVZ59Ev58U4Pc5vdUx5uPZIantjRFV1WUGrcFcCg== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0315.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37e::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.27; Tue, 8 Aug 2023 05:51:07 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::5e01:aea5:d3a8:cafa%3]) with mapi id 15.20.6652.021; Tue, 8 Aug 2023 05:51:07 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 8 Aug 2023 07:52:09 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 X-TMN: [uoC3j5GtsXQEpeG7taK2ncpZo7Cms4gJlX2y8jyl2NE=] X-ClientProxiedBy: ZR2P278CA0059.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:53::7) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230808055210.3722519-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0315:EE_ X-MS-Office365-Filtering-Correlation-Id: 458e6ec3-22c0-43f1-d090-08db97d375a8 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9XmoX37RsZ1wnibCAqRFUNAlFJjdss4R96zTR1Dqi/ftX4Z8XbZ/U5a63tc3Cnyd29JpQ/MM/1a2R5BJx5EfWOgTMY/qOkRBVh3OoLBB1FWxEZyKkarEjDluIjmIcbPayvFT7if0BLkzkU5vqQpMTb034IoIpXygy9mlhzt2IveDZWsUxduiaO7hGS9FIml6kYE8UXyunTsac42sue6lpR7EodBiebDrPmbbroJIDc1ly1gynNCsSFQry5nTabkxQFvua2ot7XNKcLcJyVatvMDP81NHqU0quD7wB1P/gYvNTjOwZkQcr7jSgF507bCfHGQmmmG262rQr/hXq6kxuf9NXaeDdD4+nsswKWNsd/c2fMZ/CZtYH0r0GVXrKNgGkg04utawLW6NmbijM6NQthXmmhGkXJPHkCTK+0pwY3rnqQ7P+v1ec+2OAfiH9mbxsg6p4j2OEXTRm6DEyJUhXEiJowLiZIr7KooD2d9VGOdpoCVwGXMH6Wpe53dp6XBOBfU7cQA5bckauLXrBydh+YZl4FT4XLKbfQiEWh4k+OPV2GpczOiaZZYYPsGxVxRiIq3ccpdugP5D13YC6uzoAAmrKaSCoE/9iVOhejrpmRgZNqZU+/PRl/zMs3jrgPjxfwPJ7l9aZ0OzZSjr/yB09yHDvvxElrYwvrbzSp7WCWwm7Ek/iad6s6hjekcYF0X+Yepq79NohaRqRUI57163mWY7dClvkC6TiJdEdSedlLdg5cPghltm8BlRHLEQZTedulcI= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ne3GfJlxQe27/eoBRL9EbN3Sgg5Y8R5NNj6iy2/ukJOOInCeuIwflQvejFkAuMuLMdH06yDiZfsG4jwGGVqTMyzkjRgYbKk9RsR+2tHtrhgOdGekA6Tuqt/ro1OtN3BU/26Fx+6vbLXgttgqD2UgK215CCql8ma6Za5tiyvq4D80NmBfL0r8alFbCZ0EJEP489O4+1Xx7Yr7rjaftGq0LgG0DpHCvykOTiIXegTTY5oQ4UjJNCbli9z8jnnlWjtwZAkSoNezxG6N6MrqwXuB9DRfE2qdAuFlYljkMEzSg0psOxcJSdWZqc50hjWl7MqnfzWOT736fJbGFIXdpcYiYLRJMHAwVVDuu2ApvnbK04gSquVX8iTMm1rGh4e8x33u/5okdsJhi8qXBrvKRUr/5YQNdNBleEKSSV2EQfiCk9ER3HmzoUlv9WKzEM6k09pT4ojrJDli91jyLrtcBqAxrU3ZX0oDhABtVWzX58pjEXbyozveOau+OSIU5ctxBxKlLTAC4yDGzijvGCY7zCc3/fQfA7pFoXnDyDLtT4E98AgqnsjDCc0Gb24eCfEL8KNnH1kbXXLlzLpl2vyq53JDA9Z1eYa8ly4fgC1fJMXL0ZbsZyBO2ApLvjbU2fV0Ndi3 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 9jFttE5m+NFoRAMEiBecqKBJK4aA75flCu5Vs/a/LufJO7d9x+AZv4vEuIDXE8GHSSIsiiHj/ve/j5dMOWsHOEMGoBsppZDcV+tn06jKAKTYzY3MLKnUKMzudI4R44lhDb5cSqyfI3tE770KyNrA0KRUjZ5A+CkYUT+hJlicumxvnZ3HSVbwN9UmUafrNU+5ZLECPKGGHgNlcHUXGMGtlBh122/ryC/GiEkp8VFMajMwSFlxADNr/FV7pAtxTbzaBd0dNM2/shB3DKK7DDwlKyODevXHXTNAAkuCXLbTqikyPcx4Rcvz0tP5LAaGqDyBvIc06nLbfNwjW5IPS5Yp0bArwn7isM4jKBDcFFglKfihy10j7AlOI5D0GUZxay44KoESQSziqZg2DquEun5Mclu+szuNU4PcHUkfWEhwUVBMmWw0G7VVLFQhaIVN+uF5NNVgX+Z1qR/PosdiVlTpWu+6MVaB6G1xQemq8HeBluQmxx4QD7DoWaedONGs4cv6TnMJzcwTFiCS/qKTibfscWyCv8u+kzj2QZlfvdxrhI4P1hpi2Gz6zz3jl9PHyksuIkL2gh98ujLNdApcr2ZJqx+y6BVyLX8xuTrk47s99K4gJqkkrzvZ63tvh9RwL1NVTjnr0/L9EGGvRLdk2b85mhbYwG9ZnhTLSpu0eaqP6RgfxOQBVWej0kSdKozcSjDZAKHSjUwS2EL+dj9DTSxs/Rg5KR6NyfAW4VEFX3tTkiP9b0QD2dxov7zmP8Qy4wORBRx4fBgNJ0eT8Tl+//Sh4sQNqvkJBbd1XLEhnfyYpsNzRaZnnSxSqxcNnr5WO+X5kcnaNZRO2Ro6BFuUNQT+m/H5biu3uYOvhiZMWOocraK9y5DdVVNZmkuEtd4lOfG3ww/OpZrY+cLA9R8MT8x+aPM1bBI5PMu5o4jTnVHkfw8FvN/dRnwrClOHYC+Qd661q0835N9RV+FJgjQy0lxa2Z2O8kLv9J2RL1JbohqSG9awhjIC3VbmlDIZgx6VFd/CNDJ8Z30jQG7Nhq3mXFVZG3F425tsQGUIWETHsmUnCYW/8vmrwsM1vXOpB2NXhjJBTxDAbaKS/gAwAqv8kuOxutjk05JPnaf0WD83CRj9AH61sZlvAcNKeldMkq3VqCkbp+ny97xNchhMukKrHEvurfTTqH1be5yOprYY/dYtz7XSfFx6r7fbGdL3qZIRju/lzGvRyCqEu7mlMq0c6GGwYMR8rpQdMxIXltX6M0RT3izB8WG+OKkuG4OM+L63vmUb X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 458e6ec3-22c0-43f1-d090-08db97d375a8 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Aug 2023 05:51:07.3892 (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: AS8P250MB0315 Subject: [FFmpeg-devel] [PATCH 1/2] avformat/sbgdec: Use avio_read_to_bprint() where appropriate 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: wswEcHuutu/o Note: There is a slight difference in the handling of the max_file_size option: The earlier code used it to mean to limit the size of the buffer to allocate; the new code treats it more literally as maximum size to read from the input. Signed-off-by: Andreas Rheinhardt --- libavformat/sbgdec.c | 63 ++++++++++++++++++-------------------------- 1 file changed, 25 insertions(+), 38 deletions(-) diff --git a/libavformat/sbgdec.c b/libavformat/sbgdec.c index 5edb9664cc..c1995759a8 100644 --- a/libavformat/sbgdec.c +++ b/libavformat/sbgdec.c @@ -22,6 +22,7 @@ #include #include #include +#include "libavutil/bprint.h" #include "libavutil/channel_layout.h" #include "libavutil/intreadwrite.h" #include "libavutil/log.h" @@ -859,37 +860,20 @@ fail: return r; } -static int read_whole_file(AVIOContext *io, int max_size, char **rbuf) +static int read_whole_file(AVIOContext *io, int max_size, AVBPrint *rbuf) { - char *buf = NULL; - int size = 0, bufsize = 0, r; - - while (1) { - if (bufsize - size < 1024) { - bufsize = FFMIN(FFMAX(2 * bufsize, 8192), max_size); - if (bufsize - size < 2) { - size = AVERROR(EFBIG); - goto fail; - } - buf = av_realloc_f(buf, bufsize, 1); - if (!buf) { - size = AVERROR(ENOMEM); - goto fail; - } - } - r = avio_read(io, buf, bufsize - size - 1); - if (r == AVERROR_EOF) - break; - if (r < 0) - goto fail; - size += r; - } - buf[size] = 0; - *rbuf = buf; - return size; -fail: - av_free(buf); - return size; + int ret = avio_read_to_bprint(io, rbuf, max_size); + if (ret < 0) + return ret; + if (!av_bprint_is_complete(rbuf)) + return AVERROR(ENOMEM); + /* Check if we have read the whole file. AVIOContext.eof_reached is only + * set after a read failed due to EOF, so this check is incorrect in case + * max_size equals the actual file size, but checking for that would + * require attempting to read beyond max_size. */ + if (!io->eof_reached) + return AVERROR(EFBIG); + return 0; } static int expand_timestamps(void *log, struct sbg_script *s) @@ -1407,19 +1391,21 @@ static av_cold int sbg_read_probe(const AVProbeData *p) static av_cold int sbg_read_header(AVFormatContext *avf) { struct sbg_demuxer *sbg = avf->priv_data; + AVBPrint bprint; int r; - char *buf = NULL; struct sbg_script script = { 0 }; AVStream *st; FFStream *sti; struct ws_intervals inter = { 0 }; - r = read_whole_file(avf->pb, sbg->max_file_size, &buf); + av_bprint_init(&bprint, 0, sbg->max_file_size + 1U); + r = read_whole_file(avf->pb, sbg->max_file_size, &bprint); if (r < 0) - goto fail; - r = parse_script(avf, buf, r, &script); + goto fail2; + + r = parse_script(avf, bprint.str, bprint.len, &script); if (r < 0) - goto fail; + goto fail2; if (!sbg->sample_rate) sbg->sample_rate = script.sample_rate; else @@ -1431,8 +1417,8 @@ static av_cold int sbg_read_header(AVFormatContext *avf) "-m is ignored and mix channels will be silent.\n"); r = expand_script(avf, &script); if (r < 0) - goto fail; - av_freep(&buf); + goto fail2; + av_bprint_finalize(&bprint, NULL); r = generate_intervals(avf, &script, sbg->sample_rate, &inter); if (r < 0) goto fail; @@ -1467,10 +1453,11 @@ static av_cold int sbg_read_header(AVFormatContext *avf) free_script(&script); return 0; +fail2: + av_bprint_finalize(&bprint, NULL); fail: av_free(inter.inter); free_script(&script); - av_free(buf); return r; }