From patchwork Sun Aug 6 10:13:18 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 43135 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:9329:b0:130:ccc6:6c4b with SMTP id r41csp991765pzh; Sun, 6 Aug 2023 03:12:29 -0700 (PDT) X-Google-Smtp-Source: AGHT+IH6AGTJzJoFRNw8sGNxTgKYcB2uvAF6oGnWIiEHBV46154uVrUJjRzfKYsWsFRd/u4WuGfP X-Received: by 2002:a17:907:2be2:b0:99c:c8bb:ff49 with SMTP id gv34-20020a1709072be200b0099cc8bbff49mr2027476ejc.20.1691316749473; Sun, 06 Aug 2023 03:12:29 -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 q8-20020a1709064c8800b00983f3f76dd0si4497469eju.155.2023.08.06.03.12.29; Sun, 06 Aug 2023 03:12:29 -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=uZCxbWLu; 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 75F8A68C685; Sun, 6 Aug 2023 13:12:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR01-DB5-obe.outbound.protection.outlook.com (mail-db5eur01olkn2062.outbound.protection.outlook.com [40.92.64.62]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id F335F68C2BF for ; Sun, 6 Aug 2023 13:12:19 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=XMoNoPTRNaRBZiYTnWDgkfAuNCjTJ7vFjECZk7gpb67K5rDss/HPL2vx8QrOT9yobwC6V/ziDv+QyRZySO/u3qKKfZFJjhq9QEMVvjct3pm62pK9tjYcBLY8XSSlGedQhvY7nEcKOl7mn//sWHsn+XDA2zaiOvHXQIspqLuM08hYrT+A4yKQsdTK4VyRGtkG6GQ8vM6GXKCpG9UMzkZy5jNoYU6nBajKqsI4EBQA6LvubjE0+oXBmvWGZsHs7S/sNKjEy3ta33Rvbi/NjqRhZTMT4H64DSb6LcJhPoLqYCyppBIMe/GB2PijTaMEjzWq7DNEME2KkTNP/casMggiQw== 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=wloMQI50w7AjsFb3ONrHAMDJPHp57GkAJkv2dWKDDpg=; b=oKtSIzEGJe7aM/qXWbsVaBbf0kJC5D1MHm90rvdVTrE/Gnz2rLapWZZNFSFKgBQOr725wbCh/97ZyatPUUbbMB/Q6KrIdyDro2f3SVhXwQm6BBVk21Vz4lo4eoRTq9t80BSyM9sfHr5QMKLPkb5B/C2hKPRKV+h5+OdnBbLfzTYZGkn4TuEjaqhUMnmdntpva43L54GPU2YCF0QX9iLC5Ac5BqQbC1O0kXRV2+r2YnYI0S900EuPblF8MRakbziQg9xbYNTrWB+Nf/aSFivzsjBlxfms6fsXZcfJa3LuFLgcvXAl658c65/HHtH+nmoUvEVfoqSzJHCVm92Fa+2/5g== 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=wloMQI50w7AjsFb3ONrHAMDJPHp57GkAJkv2dWKDDpg=; b=uZCxbWLuE7D13IRChf0tyCOnY176mnPguUzu8wVj03b2RsSgW3N28sd4l1KHZuf6NOyFXjCU5+qIJz+cBesgvLYVFrZYOJZzg2gNo3giuWsn66rBrtvpNXbGPxRk1M2pMZh+Nuge1N9+7cZiIPQm0W79jrhNN3Sz5akQIGs7LsQgYc9TMRt+ZkUya6c5/HRLH9M0oeUmOtYxCCN9ZUDROfjtInLcaEBIshVl7DTrdvWCukk4WRs4o9161DcWQqn8fU61cYBc+tvsHraxLNqP24NLEgTsGz1xgaNjZl3ghcD5QIk3J1TgBD1xCJ+6CN8kn2rP0VPG8glOzzzZiCwppw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AS8P250MB0378.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:37e::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6652.20; Sun, 6 Aug 2023 10:12:18 +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; Sun, 6 Aug 2023 10:12:18 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Aug 2023 12:13:18 +0200 Message-ID: X-Mailer: git-send-email 2.34.1 In-Reply-To: References: X-TMN: [PSqJHwpQHfFtk5UW9SGff90HtVPXUFEh3XyfeUnFRhs=] X-ClientProxiedBy: ZR2P278CA0013.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:50::17) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <20230806101323.2828419-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AS8P250MB0378:EE_ X-MS-Office365-Filtering-Correlation-Id: 5b6168ee-7d17-428e-25da-08db96659d71 X-MS-Exchange-SLBlob-MailProps: AZnQBsB9Xmre2cOvxteVHTfiuSrHMX7onZVLmrVyzQbpkSK55AKyMMBd05CJjt61FxM/Xme7e/zp+l2XBIIdRzmKXtu3Ce72hXJan40V7BFik9cVOtHwsb3ArKgqWHB5UAMgiW97T+7HA7d8yX6iQzVHjGdY2lNPSzT+O6q6Gr4bw5ahjKOK9ARuGt9LiTWw350MMh1XKJVSRcH4ohRVdf5qlw9DhIN++vfvEaC5ebKCsNuKiWT2ZpqUHdRTgxaD17W/QWfbpGT99u0llFWK5CWVEJmLmeqso8IK1l6uUhPL/PuzHHtA4IR38ivtS6Um1o3UD/bUK6Qaa1XkL4CjZO+OLPD9//OZREFUo1CbpPcUtTlcG/Gxav7NMmUoKofiZniXX3OHP+rBkkj7K4eu2bE1U6fYYzC7m78x8dUCyZ2b+96CdyrzSgxq1r+8fWGLt9SZzl48bafLF0r3WGru1rxHQVoLvzcGPIISg+b4aByOJHNkgbKdoaa8yycJglOuNnUusBm08mzMSD0K8WIFdApwRk1djH4wJP3XoorCG7a4vYsfVkr4gDWgJ2k3PrgpS6gL2B/aH+nWNPgfMmOFlIgotUX7qCaFN4mwY+bPuDg1OTIl0Hu8LXsAl4sbko8xhCnZMLPxtzg1qOLmHVzG5C+zDly0+QZ/gHSLAXOwL2PZAXIFB0C/0b0uQ1GDMXPjya1M12+LSZIbRhMIZpWQLi4Hnoj+lyIKAs7mz02kAq5b6rjbWZ3S0gfqIz4qWaDUgCiPvr1XDvY= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: l53NF8Zq8UfMieXPBJZ6aOWC2GATx7f9sps2zOb1IloqbO2pHs41ELZrM1cZ/b4OOO9u9BQcmy+698JBGdo6Hl/ouU/RhxdasfZRmxAL0n8hBC5A0XXmRoPebQxCm1aaLrnT2+0rlMJgtpj/FF9p/gLTCY3e9MrjU/7MFlDCcZ585duZmRYDq2YENY9mWjHN+Iz4uA9DQy2n7xD1IW3rID0jmFXv6zkCumj6aaZOV1WZBe3ZlUHSdsbaZ/xwq+J4omvKS1fqOND6JOEbB8QTBpaN2Rc52wqxHXoK2TlwBsJCdVgKsz8MIr1Zba/V5i2Ix4wHsEsPs4XmEKqNLR+dvCIEvhVDTu6ckL1opYWFrBg4VcsFzoZ98vNU24EC4bCU9LkkRqTzrSYybt8OG6I/sFUUtfEpYOS2fIsW2Hs7rj0b9UVERFJJ/M3u81x85aAa8VnykxQNu6texe7YZyqZnNqhN9nDOeGu/wpuF4PyrbZcHKiXCiraJsQe4gHrKhKH3Hz+fIzFVfonMWR8h1G6IKbGN1qDV4Lxrids7XdrtnYuIYgw1s1ZOPxQ4/jGyK94gTzDeWBcK1IS/tGKc79Kt1ehh9B5Ff/evXK68gwEaZiL3A7n3AxoJQkSqgHKhbPe X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: lYp4ughTAEmHZmMv+ALlmKZSnbazx9TQjQ1mZqE4uSWkHxxXKGRb+UPi3RGeR7LCK72GCEw39ytj9vSWV+Tc88/3umpXvk8+STmr6pHUJrfVFoHaeWl69WxwgK379/Io5BzRp4sPSIcW4xN1bGL7vfflUif0renEAx/3sqBjuu18zbkcFPCM17RFK7hNJbaPmQkaX9T5xsAdm3dAz6QlqIxLLtyPVOClPu7j4KbQeqTXHrf4gWxLF5FC+CwP6eipEOJsoUuH/fxHlnjfj7xh/aXoK9iZjXIcPYyilincEwINtgeFLQZ6YhfwkSS+Clo+4dFx0iiuC/VINzLlYKMZvcbpVaptn+SYbzCUaWICDnWty1hkTCDvvjRctL+JiHPcjTvT8REkY81ohGPq0K7joHoADsLaa19YtGADkBSIDZ2V8YazuGUF3bqowATJGFmXRzGwtmENtoFlOcL2UFjNsWkIlkz7jr8PcmJQo0h8LUMzW3UOXlqXYGpXO/ce/or6l7cLBRx6KOOGOypFTwuva8/1pR5FLAxSJY33EOziqcelTRY4mQGgX/jEFF/bmkI5zEOQe5SZBHY+NE4YwtMAHWWorr/E5Br1r12Lr80EGG/QDkmv2K9un9z+aLzbQ7/Qeufq4d3A7DESaYwBlBcDKSbP9wwMik4ef7ZGenywBhfnMMLPQVk+XiWKCjcCD52RKvvwO5Wk0chv93yZl2ixCib01BHgNtLAvwQBrPJpdFgIC1DbsvY9gkd6ELXz+t5GYdPo9ptwAchyFwYhqJB/aETuNzdgC0cbHx6g2cSxFhzQgFiN5dZVYryVfLoF7n+W17u4qwFB361fQR3m9J+jYK4peZmSE8ClBowzeu7T2wWWQE4wwfTmXSseSPEfnNOOObYJSshslWIsPNvEPFfLHDwEvN13VSLfulaeR8EgdzSpILJK3EV51EOH43oh9PaKYNDmxxZccjtbyjw8bKE/2uJSSawb6QSmBCWII2LtlUV4oM1tpwPwTn6+o+QGWYGbX9m2ovdlJAUifQyvxPTCcHZtBtjJQlohMSAs2dC/k99ta/MB+3Gvq97/S+kp41KKfyH85PcXYDYvx42LNUCrIDtA3gfu/qKsSdJTo9YrAoYhlZcv0RGiTjaV1nh1o4sowiIbPkPz5WVkmBbx9eJ7WKx305ywRFISa2cLxE7GAx+IKdT6huaJR1Rynnhp5rGvQmptnjR77qjbTkXZuku/13pfq9fy0bs+K6+3Ux5U7UW6qk4sv9pUwDXfnCumcBhL X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5b6168ee-7d17-428e-25da-08db96659d71 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Aug 2023 10:12:18.2543 (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: AS8P250MB0378 Subject: [FFmpeg-devel] [PATCH 2/7] avutil/bprint: Allow size == 0 in av_bprint_init_for_buffer() 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: 69qx42XInAl4 The AVBPrint API guarantees that the string buffer is always zero-terminated; in order to honour this guarantee, there obviously must be a string buffer at all and it must have a size >= 1. Therefore av_bprint_init_for_buffer() treats passing a NULL buffer or size == 0 as invalid data that leads to undefined behaviour, namely NPD in case NULL is provided or a write to a buffer of size 0 in case size == 0. But it would be easy to support this, namely by using the internal buffer with AV_BPRINT_SIZE_COUNT_ONLY in case size == 0. There is a reason to allow this: Several functions like av_channel_(description|name) are actually wrappers around corresponding AVBPrint functions. They accept user provided buffers and are supposed to return the required size of the buffer, which would allow the user to call it once to get the required buffer size and call it once more after having allocated the buffer. If av_bprint_init_for_buffer() treats size == 0 as invalid, all these users would need to check for this themselves and basically add the same codeblock that this patch adds to av_bprint_init_for_buffer(). This change is in line with e.g. snprintf() which also allows the pointer to be NULL in case size is zero. This fixes Coverity issues #1503074, #1503076 and #1503082; all of these issues are about providing NULL to the channel-layout functions that are wrappers around AVBPrint versions. Signed-off-by: Andreas Rheinhardt --- Missing lavu minor version bump. libavutil/bprint.c | 5 +++++ libavutil/bprint.h | 3 +++ 2 files changed, 8 insertions(+) diff --git a/libavutil/bprint.c b/libavutil/bprint.c index 23998a8b02..4e9571715c 100644 --- a/libavutil/bprint.c +++ b/libavutil/bprint.c @@ -84,6 +84,11 @@ void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max) void av_bprint_init_for_buffer(AVBPrint *buf, char *buffer, unsigned size) { + if (size == 0) { + av_bprint_init(buf, 0, AV_BPRINT_SIZE_COUNT_ONLY); + return; + } + buf->str = buffer; buf->len = 0; buf->size = size; diff --git a/libavutil/bprint.h b/libavutil/bprint.h index f27d30f723..8559745478 100644 --- a/libavutil/bprint.h +++ b/libavutil/bprint.h @@ -144,6 +144,9 @@ void av_bprint_init(AVBPrint *buf, unsigned size_init, unsigned size_max); * Init a print buffer using a pre-existing buffer. * * The buffer will not be reallocated. + * In case size equals zero, the AVBPrint will be initialized to use + * the internal buffer as if using AV_BPRINT_SIZE_COUNT_ONLY with + * av_bprint_init(). * * @param buf buffer structure to init * @param buffer byte buffer to use for the string data