From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 6756D410AA for ; Tue, 15 Mar 2022 20:08:09 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 83B4568B120; Tue, 15 Mar 2022 22:06:43 +0200 (EET) Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05olkn2108.outbound.protection.outlook.com [40.92.90.108]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4728E68B083 for ; Tue, 15 Mar 2022 22:06:40 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eaN4PGA+sOGIjy3PQ1W4dmc7u7kTMrMaqXUp0H/aTqGszQFaUJg+GVPuvFLnHOd1dwdfv8yv/b/0EXWKn6SNWpAXA53NqJJroqaR1pNnZJeyMWNOxJb/uyHfUIfPJFuV9C3Zd1pXl6qrKhJZXiGfMFMBrbQ4S0HuQYi9aZYHwuLy+SAexMoDPkw+RGJ8vK1UcE305ZRDB4yBBpPKikkzjcZxKPdgh8cK+LICk9Y9EINLJm/Gf9jUeIUWh1HP4Nz1Y0ca0inlZ3grFeXh1bqkeFDSdXyr6wd9p9SQfoTGpcFBi6bdrMYPkq+FlRRR4psVxeRVTD0L//jK5FvD4NXfDw== 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=CFGisbQATANcUYnEQjLUfF2PMQc15BaWeiL/EqvstSQ=; b=aFmwTe6zuaZ37z/uI1YMhVb6llefz5BgK6WZleCanvvlOXMQGsqBYX3mbGDhQkLzmuMeQ0C1qfWs7J85kkA8hvUfc+elF3xoj2wSB2OmSO15CqFaYdmdQq0s2w4acSMX2gaPjCazePdkBCOhROguGzk1sEbl6JlDP1tDB9P0Z68S1fxgGCUHSEYGRd8vLc/KWCyuQ5LXZReTfauqXgqXpDBMH7AVAXcBxk4yBa7EVK6gvlBlrHizJr0txMilfK87LPIbm7nH/wKnP+7CVPoZOEpf7SRYkGGfTgBC3IcNudzjlOhSuqpNCfAKythUg4hfzGDqrCdbkUlSIQyg4kSDCg== 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=CFGisbQATANcUYnEQjLUfF2PMQc15BaWeiL/EqvstSQ=; b=DWLZ3SwP+aaVW9/RoO7O/ZxYw8euHfpxX46/tkW0hNhBnYEbpB/Yw9ZHOgWQbD49FwWAZCeTRlUri2Ad8yoIVuCswsY2inqC++sl4C1IeB+wHgKg8i2ElCz/if2zKYx6sXTEUVC8QbB1kEZcZ298tliYIyBDdNHAWEcta9rL8lnv+OQKWB1nk19h79LZrfWCUkYu3fl+AMhHz6+UlK7RW/LpKq6UiKhQLAGhb0dLiZ4T4KthDA4LTvtnFJ7maJ1EafJgwCp5Dof3eA/GSRctOKmXkHFB1BhjFmUjZLrapSiy2pDJULACBpEVFwfKx7Aq3dtGdq816WVj7k1si/mxcQ== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by PA4PR01MB8947.eurprd01.prod.exchangelabs.com (2603:10a6:102:2a6::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5061.26; Tue, 15 Mar 2022 20:06:38 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%4]) with mapi id 15.20.5061.028; Tue, 15 Mar 2022 20:06:38 +0000 From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Tue, 15 Mar 2022 21:06:02 +0100 Message-ID: X-Mailer: git-send-email 2.32.0 In-Reply-To: References: X-TMN: [vX8O5N/2tttSWwy8MbxxlwQp5kwobplo] X-ClientProxiedBy: AM5PR0202CA0004.eurprd02.prod.outlook.com (2603:10a6:203:69::14) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: <20220315200611.553534-11-andreas.rheinhardt@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a98dafc4-89c0-4f5e-81f8-08da06bf5060 X-MS-Exchange-SLBlob-MailProps: S/btQ8cKWiQIK6GOv6I/5+ncmNhpuEjVGls4IvjQtbz87ZfmNi2I1M9bvygoMfsXA2dC7p+o9e0TkUsflAbqUJnovToAU9S589bE0Wob+FfVwX7oBtDzprU9xvIlmKFx1rvBA+bM4Sp2geJfWmZfzhoOhXsqaex5fNS8htL4D7I6zzcsa+mCObmo00HFTR+Ov4iQM0Tf59022hgVOGimjTk35vi8/dTCniLWWsW4rJaJ4l/cWwnECI4I+wWaQ1P1p0QC/UDImLfRwghJpjrSM4y7chaW1PzH4PRb/NY99oF1qVnuz/pJEhJeOK338cifgbVpSb1LrglF/agA/snP/uSK4bOv3IgdiSTFEkKmr9ejdQMIJwft5TnvGQrlP7ADtaSS6ep/s1+PARNB7T1gmzS0j1+W3KoyzlZxID0Dx3O9FEBFQLyBN7iG2QB/TtRz6ZKeN7GDXhiQ+y/FLG+nIpo3wObfjv8eYBU0rZfWg43e1hL55UOLg7yBI7ndnE7z6mJ2xUceN7dA9vc7g6HEdfUgadi2MO0cU8CXppNgnJRl7L47PyDqWGeb1MbwAuZcIXusdsDZuAqk2T2QGG1ubq0m4vYp1Rou1+zxS3UykyywiBDkOrcLfNb6Tg2Iw/CRp91dEDL6L4qJwPnoD/R7LphX3kV6HLOSXBmigHoU7ClLseeIqZMGRl8uKUOjkJNmxiVcg4v4wzCMah6JOfrQcc65VEg8FkH2Q+iYnPWm8L2SGzAJu86G/bTE1lxGM2Eg853uNkJD+WU= X-MS-TrafficTypeDiagnostic: PA4PR01MB8947:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: AUujg7qhbAljAONQGSO/3TMViKoL+LRXNH7gZ4fs+HBWHaJVGf9/ef08w4hxGZ3MuhyetZMuNTFecjP7m5clIeVZ6qqG0m5zDLJhAf3xfgOxk1mFhTQ6FcGl4UGzZGDriHgjQLHiC1MqspPyjrrDnfgI4dOyI6GOXJZcetonhuThmzBYoKerYVw2nn298cTEcdHWpQyBj9mtRvFm4YsfRGPPP071y9IKepufLL5A1LbIIVJu9kEb6vRJdJcXRFknJStJSv7AUZlJcmCptwsQZmF1O1q7poqrPrPWyXm9tZ2PumKyijOBBRnLJfGVkzaginrox4yAsFlyVE1G9uvRcizLMplH2OiKhVFglTagXsuj3HyILPVZq5BYgdQH/Cn9qcVupgyWWm2D99TKPCzCOq5NEgm4SHXvCegwvQikam4ZC6+oa8uYWhCx5dMaVc5g/UEhmo+Je2sUlMYsPTzgzc1Qly2g0aXlj9oGxpZI/9+ZtcAMe3F4UEIyUM2YGKYsE55D9y0hmHkN9X9QJTdsoPvxHkV1SnEb92LlXasrh2MszMBNvMYhkgX/SIBtjXwIQzLEstoOZwi6J85XZlPVHQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?zTjNmI4cg4BFNq1ozD6+i/xmgcOGu50Tnm2HAlwwzod//NCNE1bQzO1vrHY0?= =?us-ascii?Q?FofKjQst34nNJDj1FhOb338Mo1JfYzBE+WgsufdbK6CnzAB7m/SFhi1D3THq?= =?us-ascii?Q?MSF5RauqnpBQC396FvvKQhhbTxhr90x8X55BNU504TlvzvLSKsSmF2HaEt+A?= =?us-ascii?Q?EcL7I6K2RKchGUhL2aQN5h5tpRa4AP16Vkvw2OI0KpRrz7l/4/Gt9hRvvVDP?= =?us-ascii?Q?QJFt7qYDbaMw9ufXuKsXoA/w2CcGyDlBlOZau1I00vmFPvisTg2szQS4uaVc?= =?us-ascii?Q?BymJIvyphAZjKYigq2/q03CfvHcSj1oSEBAl7qDkJOtx3Yj7ev2TyYcU6k/0?= =?us-ascii?Q?cRtxvWN+wTAKqqCNB+XjFbrm+kuJ/cKDKwuIrOf0E97mc2Wd2+9xMl0XjqCx?= =?us-ascii?Q?HZ3hi76BKAfX1/7H1JNMkD3nBpHv2QGafu9nS8gO0HtMr6lIJy4JkirHeubL?= =?us-ascii?Q?ZTF2XYwRL2OscwT0erUPajfBAIzXrl3JabIQfV4hmNJIHppt7p/lI1yzR0d5?= =?us-ascii?Q?wWSRNlkTaCvjkMwqpITAJRtxb1AvDg64IB8sqY8zI3+1N6NHWa3xZYcTCZEA?= =?us-ascii?Q?Mmz9lp+gSNmh/ddxXupEeF6xFxH5oRXbWJVfKAiBVlyFCaCby7hZIUHdjyih?= =?us-ascii?Q?+BKHLb2UQvpTqOw0D4HibGbmF/5CgysiC2BsgXAU9y7Vcg0qdCY8G2/XQZfs?= =?us-ascii?Q?FswSObnc5AaHNerILYs61TR5sucdMBG40ruUeD5WvmrHN9z67kuqToY7msMF?= =?us-ascii?Q?XinRe5zmamEYzcGKKM4+kNRSsMyo2PdEQGmA5BAOn40KWWkomkcitAFOSuQl?= =?us-ascii?Q?fjDCnQUwV7KJwqYGuhPOjgzTYySXwAfPMzPVLx0qDnZsOG+0nncr6fLQk9bN?= =?us-ascii?Q?nDRAKPJGH56W0OfS65COUhi7OTTA0Hiz7zm81ODy1I/tOXiorhiAjjAGnaL9?= =?us-ascii?Q?eSQGGOB6jYjxSdeKM+mZxfkQYzX6yMAfT3rdpdOa8MQZGYF05SuEAb4QFhog?= =?us-ascii?Q?3cpm/f2aWdv03ISLBIQMLDzvK+Thv/zatHr3nkMgtkbRmlmpKaPf0YXFfNFW?= =?us-ascii?Q?IDNjzrAm5dUEnNFQzXSFCmRh3/6bt1/s7F9OAEGSX3V1NAeriElMam90M0KZ?= =?us-ascii?Q?7nv1ik7e8y59N4QvVDEIvhUCz3iaXtQOp33UrM4Et1rOkoi5hq8OXpw=3D?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: a98dafc4-89c0-4f5e-81f8-08da06bf5060 X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2022 20:06:38.5399 (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: PA4PR01MB8947 Subject: [FFmpeg-devel] [PATCH 12/21] avcodec/flashsv: Use ff_inflate_init/end() 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This fixes the problem of potentially closing a z_stream that has never been successfully initialized. Signed-off-by: Andreas Rheinhardt --- configure | 4 +-- libavcodec/flashsv.c | 73 +++++++++++++++++++++----------------------- 2 files changed, 36 insertions(+), 41 deletions(-) diff --git a/configure b/configure index c56b7ba85b..e3d2f590cd 100755 --- a/configure +++ b/configure @@ -2810,9 +2810,9 @@ ffvhuff_encoder_select="huffyuv_encoder" fic_decoder_select="golomb" flac_decoder_select="flacdsp" flac_encoder_select="bswapdsp flacdsp lpc" -flashsv2_decoder_deps="zlib" +flashsv2_decoder_select="inflate_wrapper" flashsv2_encoder_deps="zlib" -flashsv_decoder_deps="zlib" +flashsv_decoder_select="inflate_wrapper" flashsv_encoder_deps="zlib" flv_decoder_select="h263_decoder" flv_encoder_select="h263_encoder" diff --git a/libavcodec/flashsv.c b/libavcodec/flashsv.c index e284439972..eccf568f85 100644 --- a/libavcodec/flashsv.c +++ b/libavcodec/flashsv.c @@ -42,6 +42,7 @@ #include "bytestream.h" #include "get_bits.h" #include "internal.h" +#include "zlib_wrapper.h" typedef struct BlockInfo { const uint8_t *pos; @@ -55,7 +56,6 @@ typedef struct FlashSVContext { int block_width, block_height; uint8_t *tmpblock; int block_size; - z_stream zstream; int ver; const uint32_t *pal; int is_keyframe; @@ -66,6 +66,7 @@ typedef struct FlashSVContext { int color_depth; int zlibprime_curr, zlibprime_prev; int diff_start, diff_height; + FFZStream zstream; uint8_t tmp[UINT16_MAX]; } FlashSVContext; @@ -104,7 +105,8 @@ static int decode_hybrid(const uint8_t *sptr, const uint8_t *sptr_end, uint8_t * static av_cold int flashsv_decode_end(AVCodecContext *avctx) { FlashSVContext *s = avctx->priv_data; - inflateEnd(&s->zstream); + + ff_inflate_end(&s->zstream); /* release the frame if needed */ av_frame_free(&s->frame); @@ -117,17 +119,8 @@ static av_cold int flashsv_decode_end(AVCodecContext *avctx) static av_cold int flashsv_decode_init(AVCodecContext *avctx) { FlashSVContext *s = avctx->priv_data; - int zret; // Zlib return code s->avctx = avctx; - s->zstream.zalloc = Z_NULL; - s->zstream.zfree = Z_NULL; - s->zstream.opaque = Z_NULL; - zret = inflateInit(&s->zstream); - if (zret != Z_OK) { - av_log(avctx, AV_LOG_ERROR, "Inflate init error: %d\n", zret); - return AVERROR_EXTERNAL; - } avctx->pix_fmt = AV_PIX_FMT_BGR24; s->frame = av_frame_alloc(); @@ -135,27 +128,28 @@ static av_cold int flashsv_decode_init(AVCodecContext *avctx) return AVERROR(ENOMEM); } - return 0; + return ff_inflate_init(&s->zstream, avctx); } static int flashsv2_prime(FlashSVContext *s, const uint8_t *src, int size) { int zret; // Zlib return code static const uint8_t zlib_header[] = { 0x78, 0x01 }; + z_stream *const zstream = &s->zstream.zstream; uint8_t *data = s->tmpblock; unsigned remaining; if (!src) return AVERROR_INVALIDDATA; - s->zstream.next_in = src; - s->zstream.avail_in = size; - s->zstream.next_out = data; - s->zstream.avail_out = s->block_size * 3; - inflate(&s->zstream, Z_SYNC_FLUSH); - remaining = s->block_size * 3 - s->zstream.avail_out; + zstream->next_in = src; + zstream->avail_in = size; + zstream->next_out = data; + zstream->avail_out = s->block_size * 3; + inflate(zstream, Z_SYNC_FLUSH); + remaining = s->block_size * 3 - zstream->avail_out; - if ((zret = inflateReset(&s->zstream)) != Z_OK) { + if ((zret = inflateReset(zstream)) != Z_OK) { av_log(s->avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", zret); return AVERROR_UNKNOWN; } @@ -166,9 +160,9 @@ static int flashsv2_prime(FlashSVContext *s, const uint8_t *src, int size) * the adler32 checksum is correctly initialized). * This is accomplished by synthetizing blocks of uncompressed data * out of the output from above. See section 3.2.4 of RFC 1951. */ - s->zstream.next_in = zlib_header; - s->zstream.avail_in = sizeof(zlib_header); - inflate(&s->zstream, Z_SYNC_FLUSH); + zstream->next_in = zlib_header; + zstream->avail_in = sizeof(zlib_header); + inflate(zstream, Z_SYNC_FLUSH); while (remaining > 0) { unsigned block_size = FFMIN(UINT16_MAX, remaining); uint8_t header[5]; @@ -178,16 +172,16 @@ static int flashsv2_prime(FlashSVContext *s, const uint8_t *src, int size) AV_WL16(header + 1, block_size); /* Block size (one's complement) */ AV_WL16(header + 3, block_size ^ 0xFFFF); - s->zstream.next_in = header; - s->zstream.avail_in = sizeof(header); - s->zstream.next_out = s->tmp; - s->zstream.avail_out = sizeof(s->tmp); - zret = inflate(&s->zstream, Z_SYNC_FLUSH); + zstream->next_in = header; + zstream->avail_in = sizeof(header); + zstream->next_out = s->tmp; + zstream->avail_out = sizeof(s->tmp); + zret = inflate(zstream, Z_SYNC_FLUSH); if (zret != Z_OK) return AVERROR_UNKNOWN; - s->zstream.next_in = data; - s->zstream.avail_in = block_size; - zret = inflate(&s->zstream, Z_SYNC_FLUSH); + zstream->next_in = data; + zstream->avail_in = block_size; + zret = inflate(zstream, Z_SYNC_FLUSH); if (zret != Z_OK) return AVERROR_UNKNOWN; data += block_size; @@ -203,9 +197,10 @@ static int flashsv_decode_block(AVCodecContext *avctx, const AVPacket *avpkt, int blk_idx) { struct FlashSVContext *s = avctx->priv_data; + z_stream *const zstream = &s->zstream.zstream; uint8_t *line = s->tmpblock; int k; - int ret = inflateReset(&s->zstream); + int ret = inflateReset(zstream); if (ret != Z_OK) { av_log(avctx, AV_LOG_ERROR, "Inflate reset error: %d\n", ret); return AVERROR_UNKNOWN; @@ -217,15 +212,15 @@ static int flashsv_decode_block(AVCodecContext *avctx, const AVPacket *avpkt, if (ret < 0) return ret; } - s->zstream.next_in = avpkt->data + get_bits_count(gb) / 8; - s->zstream.avail_in = block_size; - s->zstream.next_out = s->tmpblock; - s->zstream.avail_out = s->block_size * 3; - ret = inflate(&s->zstream, Z_FINISH); + zstream->next_in = avpkt->data + get_bits_count(gb) / 8; + zstream->avail_in = block_size; + zstream->next_out = s->tmpblock; + zstream->avail_out = s->block_size * 3; + ret = inflate(zstream, Z_FINISH); if (ret == Z_DATA_ERROR) { av_log(avctx, AV_LOG_ERROR, "Zlib resync occurred\n"); - inflateSync(&s->zstream); - ret = inflate(&s->zstream, Z_FINISH); + inflateSync(zstream); + ret = inflate(zstream, Z_FINISH); } if (ret != Z_OK && ret != Z_STREAM_END) { @@ -251,7 +246,7 @@ static int flashsv_decode_block(AVCodecContext *avctx, const AVPacket *avpkt, } } else { /* hybrid 15-bit/palette mode */ - ret = decode_hybrid(s->tmpblock, s->zstream.next_out, + ret = decode_hybrid(s->tmpblock, zstream->next_out, s->frame->data[0], s->image_height - (y_pos + 1 + s->diff_height), x_pos, s->diff_height, width, -- 2.32.0 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".