From patchwork Tue Apr 20 16:26:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 27195 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:5014:0:0:0:0:0 with SMTP id e20csp1624521iob; Tue, 20 Apr 2021 09:27:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyoWeDLEmjmYOnILqEbevXSzNb+cE6OaPxnrViG7I1Z4vwKI8zJTwlb4gYqrWBricpCP0o7 X-Received: by 2002:a17:906:1986:: with SMTP id g6mr28274326ejd.533.1618936039956; Tue, 20 Apr 2021 09:27:19 -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 lz17si12707411ejb.232.2021.04.20.09.27.18; Tue, 20 Apr 2021 09:27:19 -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="h4/u8kE/"; 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 3CE45689965; Tue, 20 Apr 2021 19:27:15 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075014.outbound.protection.outlook.com [40.92.75.14]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5AD05680236 for ; Tue, 20 Apr 2021 19:27:08 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YlTAxVZmirOuGvJ0fbG0goLvq7lud71SgDaL/ZxnxyNmheXDOFNreD19cOOA/qHz6Lzyzkol75HRODWmxnhM9fnFX0GRBLjFhsZVVlLZ/iGxdSz0Y3xdBSq1+RUJwSLSJtaEhaKsOPNfIHCRa7gao41VB/Zd6CYIQzwAVHvk83L6Yu+Yz/xrBwcxVUxL3880kxzXiiLsdg51CY5X7bWlp68akRAZp85cio9175N3raeOJvKyhQ5VXZha+ZJ27j/bm9gf2TKzxfdEn1oZENnzBZRG1MY1BFhBD2TCV/qrP13d/95VwXsKKJNMcHu7qnFGSb4f1FFi55pmsP1LelXuuA== 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-SenderADCheck; bh=O55zYQX/zHSHutcqKPAMXQjcLfk6DllbPGxRalhI2QY=; b=Mpwh+fYTulSrhSqMhecQpc2ymj91VCDyciDzr3WBrbagaGpaR5w0NCAQuEz9mrj3NfXrL+wQQ5CqvI4FZbJIhIRdElwFjnNE8f3Zu/zawYh1z8boTnxdq9bUoo1OF7Ibl6WSJTBYXlSEyf+WXwYzuteQH1SZJGQW0ATHDVvM8YT6oD4k8tn2DrXoosPCzSrvHB3NbAy8bm3SDxW5Hd7rV/YB1CPs6e6ypnv2FU+ASI2It/WAxj3kfEdmP4dpvlGzn57QwTQykdHO+OjzYBgvzhxHqj0qsEeW/CLWyeyLLxg+bP0IQ9Fg6pkISzfH19lraQwAv55U9IgiqS02YR8/7g== 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=O55zYQX/zHSHutcqKPAMXQjcLfk6DllbPGxRalhI2QY=; b=h4/u8kE/06fGrYdpPTDxj+zcM41uHG1l4WIygJPEpDqhAe2rI9h5/LwV6mXF/yUmLpInU5l8OEsd2BqpI/i1vZD2bUjATKUNsoMgxmlmDy3x83z5pa5XeTdFeSH3o4+uCiuqJMyOvF8rPjrbcySa0CG/BWadRzdg57o3SzUGd5qShbd9L+Bd4/hrsyu2Pu/8MXtIS/WVIXMXb7eeu/zV62eTztg4oSPrBn3oaAQpcauQU2R5GQ+qDJ4/GJcgTaYz6fK+csgWho+/hDdNq9idjaSMji+1gAWoQmi4vc4WVNrpuEl1jhiYubWOhmlcG2YxANveiAWU4soAGMM4AO+hxw== Received: from VI1EUR04FT030.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0e::4f) by VI1EUR04HT151.eop-eur04.prod.protection.outlook.com (2a01:111:e400:7e0e::357) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.16; Tue, 20 Apr 2021 16:27:06 +0000 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com (2a01:111:e400:7e0e::53) by VI1EUR04FT030.mail.protection.outlook.com (2a01:111:e400:7e0e::366) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4065.21 via Frontend Transport; Tue, 20 Apr 2021 16:27:06 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:3018C79832EA90282A5863E4959B87016D6E82FF891D6959132A76DB17122B97; UpperCasedChecksum:DC56D197547C0562BDECD0A46BE9D0865462632B2D2073027DEDD2C96CCF64F3; SizeAsReceived:7475; Count:46 Received: from HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7]) by HE1PR0301MB2154.eurprd03.prod.outlook.com ([fe80::45bb:c44f:2b75:23b7%5]) with mapi id 15.20.4042.024; Tue, 20 Apr 2021 16:27:00 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Apr 2021 18:26:49 +0200 Message-ID: X-Mailer: git-send-email 2.27.0 X-TMN: [j7VGEr6Xk/bzePCPIZ/IyF0l4Fx8k3TAiOGg/zwclvM=] X-ClientProxiedBy: ZR0P278CA0004.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::14) To HE1PR0301MB2154.eurprd03.prod.outlook.com (2603:10a6:3:2a::22) X-Microsoft-Original-Message-ID: <20210420162649.1896920-1-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from sblaptop.fritz.box (188.193.169.173) by ZR0P278CA0004.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:16::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4042.16 via Frontend Transport; Tue, 20 Apr 2021 16:26:59 +0000 X-MS-PublicTrafficType: Email X-IncomingHeaderCount: 46 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-Correlation-Id: 784596b3-5470-4956-17e5-08d904191f75 X-MS-Exchange-SLBlob-MailProps: zswcL9HXbeWd8U80GhNX5qXJRx/nPifIldswl4NZzy9zUaOldwe0GDQ2ssOY85sphzvHL8tKeCDsBXWQHzKMlMhAS4G3AEmC+JSLw5FrNkipCjcg7K/1Qk5f4pNgRM8U14WSWQUy1C+OvhDnh2FfqIxN1FlY1X2JAD/IPrT6vdXFvNTudd33qd88u8aAya0lSZX9yCxctSlLMkoYg3dPp9ro0JtPkH3TAF3WImBZclZW2u+od+XlLqGfe5Z3HCkKa9kMA5ZzUy+pPofwUA1WpQko7z4o2tIoqEJ2dLgs8ZFflfF7ogyh8TYs9zJlvcvslOXPiawMjsHZq1nVCSF54s8et5Z+lVTBzzVz4X2vYPZrsEj5Y4CA7jKXxPmTnGjcRZdK3UhMpNvyilO3xMyX4GbTmJmeIb+1JGaYYS01kLA2xW8nLckQThbPgVXyN0D3bHS4gkH4448iMwnQvlY7KQ2k0nRuB52yz3gd6uYdeOo/08qtW6jVwydDHnCVnOmgF4pf3KseuFqwrJdVUDTpt2O3QuJ+0NpT4NtH+ftY/U84NUsLoCyHbrKabSAimsKU4C8XfiAXj3eMrskG42d3/36vpoQsn23OqzcMYj+TQpry6m6QnZRAoNlZ+MzKNpuv+e4ZOPOHXmEPkyYQ+/MzfOs/8FwdpRbBdhZ220WyEK54mApZSjUfwUxsPhjXnEviR7IhAcoBgOSun0Eo9fic+uzsRv7bp0XuCWnXfHUmeJ8KqqsfxQOWlc5eokEITdVY X-MS-TrafficTypeDiagnostic: VI1EUR04HT151: X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZlHTIeRrvhDk4UlI67HTG/jzOptWN6N5dWeyKEQ1SGyxZRWbw36UclE02WEpS8S1faFbq5ZWfMTOZespcka6BNXNTLl6Nkt7+hFp+752htNUFCYEsqk+cpMVGddBw1AoEN0rvvAU1QokFss1i9qTbTXJOWNn7oHCihatLQ23rNOyvZlpPDO4fBTgDNjhWwqIdD10JNKHpYSTUEAYj2bgiQhdXkx0oSafmGtF8rF2/3N/zZQqLZpK/suvMnCoLLceK7HKzsBKYMrsoJhOfYZ4pktKIevYgjyEBosqEe5UFjpaTIG8I+5CftYixUDBi0ULV2hSbTbfg8GTm835noi3Mx5dMM0d/A5A3p5YgmTzS12non60OGF8UuqnmGj7MCyvWRcbRYxlXC3Bhe74Zpa88w== X-MS-Exchange-AntiSpam-MessageData: lrqtvrFgkaq65hvdH7IoFJrOqW4aYj2BYDwjz7Pjy1urgaX7UGTZBi3d5nK5I7DHye4XbfQ0KGSuZC60JkjvXFkkrcGEtqIQBVVNsAj1g1gxqTZVtW+F09kRjvIFyYmB/tJMC+ZocjSgBl56/JGtew== X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 784596b3-5470-4956-17e5-08d904191f75 X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Apr 2021 16:27:00.1405 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-AuthSource: VI1EUR04FT030.eop-eur04.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: Internet X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1EUR04HT151 Subject: [FFmpeg-devel] [PATCH] avcodec/jpeglsdec: Don't presume the context to contain and JLSState 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: Michael Niedermayer , Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: uPw+2sZj8acE Before 9b3c46a081a9f01559082bf7a154fc6be1e06c18 every call to ff_jpegls_decode_picture() allocated and freed a JLSState. This commit instead put said structure into the context of the JPEG-LS decoder to avoid said allocation. But said function can also be called from other MJPEG-based decoders and their contexts doesn't contain said structure, leading to segfaults. This commit fixes this: The JLSState is now allocated on the first call to ff_jpegls_decode_picture() and stored in the context. Found-by: Michael Niedermayer Signed-off-by: Andreas Rheinhardt --- libavcodec/jpeglsdec.c | 15 ++++++++------- libavcodec/mjpegdec.c | 1 + libavcodec/mjpegdec.h | 3 +++ 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/libavcodec/jpeglsdec.c b/libavcodec/jpeglsdec.c index 92df81600b..e17de09e9f 100644 --- a/libavcodec/jpeglsdec.c +++ b/libavcodec/jpeglsdec.c @@ -45,11 +45,6 @@ */ //#define JLS_BROKEN -typedef struct JpegLSDecodeContext { - MJpegDecodeContext mjpeg; - JLSState state; -} JpegLSDecodeContext; - /** * Decode LSE block with initialization parameters */ @@ -355,10 +350,16 @@ int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, { int i, t = 0; uint8_t *zero, *last, *cur; - JLSState *const state = &((JpegLSDecodeContext*)s)->state; + JLSState *state = s->jls_state; int off = 0, stride = 1, width, shift, ret = 0; int decoded_height = 0; + if (!state) { + state = av_malloc(sizeof(*state)); + if (!state) + return AVERROR(ENOMEM); + s->jls_state = state; + } zero = av_mallocz(s->picture_ptr->linesize[0]); if (!zero) return AVERROR(ENOMEM); @@ -548,7 +549,7 @@ AVCodec ff_jpegls_decoder = { .long_name = NULL_IF_CONFIG_SMALL("JPEG-LS"), .type = AVMEDIA_TYPE_VIDEO, .id = AV_CODEC_ID_JPEGLS, - .priv_data_size = sizeof(JpegLSDecodeContext), + .priv_data_size = sizeof(MJpegDecodeContext), .init = ff_mjpeg_decode_init, .close = ff_mjpeg_decode_end, .receive_frame = ff_mjpeg_receive_frame, diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c index f3d9e99aab..7c7cc20af8 100644 --- a/libavcodec/mjpegdec.c +++ b/libavcodec/mjpegdec.c @@ -2916,6 +2916,7 @@ av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx) reset_icc_profile(s); av_freep(&s->hwaccel_picture_private); + av_freep(&s->jls_state); return 0; } diff --git a/libavcodec/mjpegdec.h b/libavcodec/mjpegdec.h index 0d69d9101b..2400a179f1 100644 --- a/libavcodec/mjpegdec.h +++ b/libavcodec/mjpegdec.h @@ -49,6 +49,8 @@ typedef struct ICCEntry { int length; } ICCEntry; +struct JLSState; + typedef struct MJpegDecodeContext { AVClass *class; AVCodecContext *avctx; @@ -163,6 +165,7 @@ typedef struct MJpegDecodeContext { enum AVPixelFormat hwaccel_sw_pix_fmt; enum AVPixelFormat hwaccel_pix_fmt; void *hwaccel_picture_private; + struct JLSState *jls_state; } MJpegDecodeContext; int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table,