From patchwork Mon Mar 25 15:11:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 47449 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:c889:b0:1a3:b6bb:3029 with SMTP id hb9csp1252837pzb; Mon, 25 Mar 2024 08:11:38 -0700 (PDT) X-Forwarded-Encrypted: i=2; AJvYcCUCnSUHnbgafvWasqTAXc6my+SNVoqSjGllMvyEeJCFVC1nb8dQYC4XTmeTIk5VJPzRUOFlZLItOBCy7lD2uzNEkAiGMjxATJ+6Xg== X-Google-Smtp-Source: AGHT+IHS8WHsUzw/j5HHMvm+8E7jSanZYZ62nLz0dEtDV1+8T8Bx5VKdIelsMSubQ9G6IP7fonQB X-Received: by 2002:a2e:b74e:0:b0:2d4:6a34:97bf with SMTP id k14-20020a2eb74e000000b002d46a3497bfmr5245026ljo.49.1711379498264; Mon, 25 Mar 2024 08:11:38 -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 c2-20020a170906170200b00a4535a6cf2fsi2478558eje.407.2024.03.25.08.11.37; Mon, 25 Mar 2024 08:11:38 -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=LqxS9oJ3; 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 8691F68D55E; Mon, 25 Mar 2024 17:11:35 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2017.outbound.protection.outlook.com [40.92.75.17]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 111E768D300 for ; Mon, 25 Mar 2024 17:11:29 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=la7kN5kK/83SFzSSK2AbAJ90gDDRabDYc0H2pkGghJPibxibBfUNkcLvUm6aN9JL+OnPnLpHcVgj/DXJiZicE14GLuDpzQjmrfN/groD0gMuHbnVo1pA7wz/COntAk6ySp+x5hfqC5qeCkmUltlACLR8GGOU5NebNyVIZjv4o+d8qoheLqtVILUJ0NjFxWniNIO4Lu6HCwI+TTD0DMZ0O63yl3m7IhRbbLii3gv04JNF/6uAruCsCW7T2AvjKERhcbLl1WMU+os+xUCVsu4ROaXUyUzFNFhQGLCRjD7sO72xyC+sy0ldgHS7zKXy9SrJ25n2flzF0T53SFUzRynyyA== 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=khcZzeGXOlvwMGQRrs8GWzxXS1w3EAXlxSgspYxMVp8=; b=eZWZ0c5Sq+BjcL+eNSho3lH/IjOTGlyPlg5p7TZkeq0yV+ghgKisiysNizlWPZPFnPTEpDmU+tKHA1Qymxiux1lBKTx0SDW0PnREe/ouaAGvX/B/PR10E8Xa4yHBR5xkvuAGq8MgUK///JSryvx8RpbAtqlJ7d9dQAsjQpB7oDK/Ys+0HzLJeFaHlWXO1kgtdgXlzWz45BdViQAJFWuI9sDXsw3H7kO8BZH+j/lM/ymq6O2s9CC+3NbzbVUqo9dLmcWsfIYYJacN02F49Q+Su6AUKjL7r9M1B3ihrrYQV0kr9kBD55nks5SyDrc11OXQs8RsvBVkRp/uvjx8+G7llA== 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=khcZzeGXOlvwMGQRrs8GWzxXS1w3EAXlxSgspYxMVp8=; b=LqxS9oJ3uD0WfRpWTXVDNbyHpkse0ac6evryTDO5DJPqQ766MWHj1+a3yIoZsSVAJMVzcnmghLQOAVVYwdg95YRRe4g28mHHEliwoxD3PWdL5LK+dOma/sYqgmM35xVU9a6P/i7lRC+2+UpovYohlLTQMjJzn1qBjmIOvFIml9rP0sfKu+JDYODYEnZymm5aHwI7hFE4f7KfV3RTM4WTXFiXd868r6gh1VwoHksQE9qSK0jCzHi/2uVTj9nOLDBiyKEkUq24JRjI5+TLhOd8As2PK8BnipQEFb0u4cnx7spdqt6RKUcFDOODDPOkduJ+iKhcR+RNCZTDS4MgHFvavA== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AM8P250MB0124.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:36f::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.31; Mon, 25 Mar 2024 15:11:27 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::4a3b:cf76:cddc:c68d%4]) with mapi id 15.20.7409.028; Mon, 25 Mar 2024 15:11:27 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Mon, 25 Mar 2024 16:11:20 +0100 Message-ID: X-Mailer: git-send-email 2.40.1 In-Reply-To: References: X-TMN: [mFxbNxG0AzbkvElCmZMHfWtQHChoU8ONbbAgukHhJiM=] X-ClientProxiedBy: FR3P281CA0181.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:a4::14) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <20240325151120.2936564-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AM8P250MB0124:EE_ X-MS-Office365-Filtering-Correlation-Id: e39fe5c9-ee68-4540-133f-08dc4cddd7f5 X-MS-Exchange-SLBlob-MailProps: Cq7lScuPrnqkjmXb1vlddM5aSa/Epk3AqOlh6LBJbZGaXEk2GZRDduhH721ZWvlVlTbEwkevVh/h0LsQB2dxeSJy0i0RKzyNw5K9PssEysxjhWl+gxWjhxEXLNPT2YXDrH6oeRvR8DCYimd43QElKrRDDK6/yC1Y//FByL3jCqLxgvLKO+nF3p60X6Wy0n5NdfEcT8kgLRCDRNAJ6FzE2S+d01pBy7x5E3K0xshlP3l+DjTj8X6cUbh2ZYYwzuF6UHRyHsp1XyQORatKEb3e261+CXB/sj5Cljq3CpY1JhBhJF1gGKtlEHXeoZ5WSTJhfYy1zmypUNMjreBlKpLTvLqM4Zc/fdTIRirmHJWEMaucB/mvO4o57vvenZa+Uk3h1k84e+VzsrsOLWX0KREjKzsMeARwl9Jj01x27tG427MTkQ3FwTDR7WCBQGLC/BNn+P3bdTeDdHZBARL3WAMJJZ7RIQFSXlXNE1nrWpySBe/uuVsp+NIzDDQJ0OQCp/wjAI7akxf4rQ5/p6Mkg7gK8oFXY1L2b+PN70K8uo4olWqb1+VZB/7sdTzFH/4D/dU7bba6+nBG3iXbhhGd0sQl6XA6ePcWwqgwzehJ3ERWanKXRNhP/OOBYfIVEwklT98V74esNMbkato9yw+hPo8ee2m7QmBdxO6EB6EefjLWHp6C9YgVYzcDDBt531OA13a4n7f8/WmVtkv73lvYBivNr++tcwB+t7m7MiDDcGybkG7ydXQ2Zety84IPnDZ6P91LolHm5RTr9Kc= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: UYtqVJeyj64KEUNYwSkGOjE6EYp60oh18lfIj8Wo55oLkFxkpYlSsJE6BLAO3Wpl0sPF3buKECNtJnbLfbaU0Gx5LijPRlpfUM7hSwg9RZsnoz6sojkn1Xl7T0RQq1K3le6Ut3Z4T1UO0HGgZGgrhW9sXGoh6dFPRme1f02RxqIZjsEfmvGYW1/Y4dBJuKZz5RDUEAETqYrTJ3VHWSfTURtm1OKwbNo1g/B04BlWfX+3lhFW6U4VX+ysdRDPWg7jeEqePO+DVnkyg8O00RRslVMHXG6+3Lv++/WK0zN1ljdbcYKmdxJ40uD+ggo/lH1C65sStVM1S8DvMOMu8UgvbmIGk6e0/h+MKkABU7YFG93iDWxtYbyHZqDipMdd5AZDk5IoqpuMEjez8tBWt3UW6QavCJKJLZXAZsoY8KkSi0fvZK6Ij7/AT0bKRbsZopXuaEzr/RDTpSra9mV2F/FuDVtEMzFsrksjZG1a2BX4D/V80qI6EuBx2fqxKnv/cRgk0lRm4wOzxOLUHoxmKOwumcY6pjNKjxtQlVIIyDB49sScv8PsvpPWzBTaSiIdWRRjJVRZ7K7QXSdpa0idPmSGGVeohUxU11R28WzUpZ1OXtvYh1wccQr1V0G7sTbbChjF X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: oSdlUOY5eCl2MmKPSrECbgdb8wtY7ORptvfh/SHQ/psLMQOHEs5der4ZlcIkdVa8JCZoVz/BpMtebEfkxZHHt2PlK1Bbd4tG9L1GOwQ5km/cDqKuYT1ikKIj9JHAUZt14skRxIlNtLdtO66HBQEgDIXXVLbnWW5MiRQvEC9YYQ++3i1vtJi1GgWMMJSnaRLXWR+W4s8zEJ9mMzF34yXR94cBkekw2CdWQteQfo01frsAbEWdq7ReuMqtWwhAkowWBC7TMLgOIEJJ8HhssM9unMdi94CewohF8nFpt4i4LoAPTgb84idWxXijWimjimnxZTdXDOQ9BfwXip9g+PURnXlD0R1vO0C2PewqtHxNmtA1YNtJyLqJ3J62PjDKeI1Wvg5vL7DLiE5H8/ioM3tmFl9zT/vJawBRSzYLt+4cldrqzybFGWPZDslWMW6MkrV3AgPwpOuY2nefHdQtlxqbLvSDNeNkx9dTjq1fKgA38v+kLy6nlfA9GsLrgUmEDnewfO5B+cv53/P10FtwAmWZWi4lmvPenpNzrlpjAc5FIGPg1F48SskRjpO+J6JUd+5XFriFwRPGBebfVwR/OsHhdR8KyeHpCpOXYqnm6Axct8oXNsDcWH/ShHafvJDzmmpP2oLuiNhaK0txLMDM/bOnenONYX2qBKOGEumPBRcXxk15aDoyG/AmYU1cagJQTDxQchGt/ojUIk3u9mXRsQXptZfhoWXUSNZLRm12su3Y81nn+aHebvfmyR43Qx/7puJ7+WQnwlqB8gk4ZDSXMPlJI1LzWfyxZKz8Cld7ANrSIZnpLlrurDbUgRSJyyVkqMTQSPrNbcjqT7WRRmUvgEjF8dmrpUfkzK0KLee4/koAMrjircrb20crucU5oJ1O9EYswB4f8cySuzDgu/wZc04eWHuXWkz9Jn3uHl/w90FD7MIL494igxObsK2UR+0JBXoilRS+VuRkr7JCTpt2m57PgAcYrUXm78fTX6xSY5WGn7ptHoymGy2f8qDODOc4HxgRukG9JH8aPzq6ZcuVIK7otwGTv5I1OdJD3tGn7cmSwoZfg4ogtmYCHqAGvIvfJk6lPBdBMIQf+ClYfxPjaq0Xt93GgzzJHzcwJccXNENKssLJVR0CxQb12bAHTxCm6NMJpzCCRENWnnHvEsOYiS7WcZ5YhOYURuVy/DVH6fULQLckrNnVxaEShJJZyeEwkpbux3TzvFb9+sxxdUzGzITE+m6U2O9sGjOJuY0rPT3DkFP9xuszOTSCYM9Q++nURPRHRMdtysYeOZfQlPRgF9uXiQ== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e39fe5c9-ee68-4540-133f-08dc4cddd7f5 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Mar 2024 15:11:27.7826 (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: AM8P250MB0124 Subject: [FFmpeg-devel] [PATCH 12/12] avutil/opt: Don't cast when the result might be misaligned 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: XjDJ6whMvn3E A pointer conversion is UB if the resulting pointer is not correctly aligned for the resultant type, even if no load/store is ever performed through that pointer (C11 6.3.2.3 (7)). This may happen in opt_copy_elem(), because the pointers are converted even when they belong to a type that does not guarantee sufficient alignment. Fix this by deferring the cast after having checked the type. Also make the casts -Wcast-qual safe and avoid an indirection for src. Signed-off-by: Andreas Rheinhardt --- libavutil/opt.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/libavutil/opt.c b/libavutil/opt.c index 3130606337..5fa8870707 100644 --- a/libavutil/opt.c +++ b/libavutil/opt.c @@ -2028,18 +2028,19 @@ void *av_opt_ptr(const AVClass *class, void *obj, const char *name) static int opt_copy_elem(void *logctx, enum AVOptionType type, void *dst, const void *src) { - uint8_t **dst8 = (uint8_t **)dst; - const uint8_t **src8 = (const uint8_t **)src; - if (type == AV_OPT_TYPE_STRING) { - if (*dst8 != *src8) - av_freep(dst8); - if (*src8) { - *dst8 = av_strdup(*src8); - if (!*dst8) + const char *src_str = *(const char *const *)src; + char **dstp = (char **)dst; + if (*dstp != src_str) + av_freep(dstp); + if (src_str) { + *dstp = av_strdup(src_str); + if (!*dstp) return AVERROR(ENOMEM); } } else if (type == AV_OPT_TYPE_BINARY) { + const uint8_t *const *src8 = (const uint8_t *const *)src; + uint8_t **dst8 = (uint8_t **)dst; int len = *(const int *)(src8 + 1); if (*dst8 != *src8) av_freep(dst8); @@ -2052,12 +2053,12 @@ static int opt_copy_elem(void *logctx, enum AVOptionType type, } else if (type == AV_OPT_TYPE_CONST) { // do nothing } else if (type == AV_OPT_TYPE_DICT) { - AVDictionary **sdict = (AVDictionary **)src; - AVDictionary **ddict = (AVDictionary **)dst; - if (*sdict != *ddict) - av_dict_free(ddict); - *ddict = NULL; - return av_dict_copy(ddict, *sdict, 0); + const AVDictionary *sdict = *(const AVDictionary * const *)src; + AVDictionary **ddictp = (AVDictionary **)dst; + if (sdict != *ddictp) + av_dict_free(ddictp); + *ddictp = NULL; + return av_dict_copy(ddictp, sdict, 0); } else if (type == AV_OPT_TYPE_CHLAYOUT) { if (dst != src) return av_channel_layout_copy(dst, src);