From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.ffmpeg.org (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTPS id DA8CF4D277 for ; Sat, 31 May 2025 03:59:22 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTP id 0252B68DC64; Sat, 31 May 2025 06:59:10 +0300 (EEST) Received: from mail-pl1-f174.google.com (mail-pl1-f174.google.com [209.85.214.174]) by ffbox0-bg.ffmpeg.org (Postfix) with ESMTPS id ACD5868DB65 for ; Sat, 31 May 2025 06:59:03 +0300 (EEST) Received: by mail-pl1-f174.google.com with SMTP id d9443c01a7336-23035b3edf1so26373285ad.3 for ; Fri, 30 May 2025 20:59:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1748663942; x=1749268742; darn=ffmpeg.org; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:from:to:cc:subject:date :message-id:reply-to; bh=Pcw8V60mIzKy2l9YY9Tj0lWMMQTihybxaUq97QvPmaw=; b=K64liPN9ZGYermB1ZNWWbCrsV7Vq1hYIu04eylNj0UeDwvnQ8T0UJTJBINz8OU7AAA LzBfGoSDS1R06DrJ9yYCwSsfZShvcXuaIs82D40czyhez+fGBv5E5ZCaxVKRL3L6gLDz Ag1Ji+A9CdnsKOOzssdSLX5PEcL7/14EI5/kFUpDp/bqVm/bWvD5ETUzPZ9j0+/+Oym6 AhbVL1HsHSVMm/hou5MqX+LhagQ9i9xvB9ME26KNXzIKlN3kfbaCnm3CiinHIy1Oh4Az 327noDtgXigcihzS1SzwLANxaDZ1eK3Qu6DdWdjtF8Cdc2Y4/YMSrsTr/3chcZ6a8gPd nWJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1748663942; x=1749268742; h=cc:to:mime-version:content-transfer-encoding:fcc:subject:date :references:in-reply-to:message-id:from:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Pcw8V60mIzKy2l9YY9Tj0lWMMQTihybxaUq97QvPmaw=; b=ZGhQt2dFAozXwHxSFhjbeZzLYB6tK3NFtgFXSjDI2BEB9J8PCiKe1yFuFgtwLOl1M9 KnTegX90Yvob1fVyj40lCVSPZDmbve4rNY//vdHBrbUJ8Hqn3fQqjr7hiGBmCuHX7EDH EvFZOFsj2ah8ttn1lus4nEy3xxLqNFbl3quFRGVF6tUzPt5MlDgcpLvkgIefv528jEg7 rfhG6Ow0q6eexHTku8U76v75x8WYvTM8IZG1uRugIMbt2JPk0cul3G7fciTzs7clcN8Z WxR84Ct7XQAUTWhsi9C1oYqprHewq3v97UWOKu/jHmUcwI7NWybSiiCJgHbNRyRDVVAk Dqbw== X-Gm-Message-State: AOJu0Yy2q8hrO3itAMijxfReEiHZL3TY4bb0ulUumcFA8Of14kdql92W 53s9ecbTH3qd+/EFlMC7vIo3XKULBeeVeCQ5j3yxCg7JsWrSlh5YynxZ3HSVvg== X-Gm-Gg: ASbGncvAcJtZl/2uwxV0z5qSXa7rz17EStaWh3jjI58VnzStuebGqnFLhBX4Sree4d2 tClbF+8MU0DqmWOYtTSFuT9MR2fh74pHnMf1dT+Zymmt9Gb3yyA1mL5iDP5KupZTkvU5NaOzxyX UBgNO3n73PY5o8THSpngwidaaaB9Sy6QdIbauEEjJL35iciT3kL8NoSmAEXiOWwaogqg1ozTynb wnXeQTeKMVb5VIVMirh/IMGym1SQUI1INm9oW/cN9F2ZxnFLhkI4Ag7QjCGBTiDgC/6HwR9Iz9k zqp+FWa49OSC9GWIAz3+uve12pLQ18ySV0p1Eo9jcrvuRyvYt/WZYkf/GvhZNtmwIm3b2w== X-Google-Smtp-Source: AGHT+IHVaBsVS2lwefMnpQ88eM9Kf0X2oeXtHq8+bTmQUWMz5ju8gKaqLW6aE5JCfUwFstYfPmURkg== X-Received: by 2002:a17:903:184:b0:224:910:23f6 with SMTP id d9443c01a7336-23529b46404mr88932425ad.45.1748663941913; Fri, 30 May 2025 20:59:01 -0700 (PDT) Received: from [127.0.0.1] (master.gitmailbox.com. [34.83.118.50]) by smtp.gmail.com with ESMTPSA id 41be03b00d2f7-b2eceb29e4bsm1875245a12.17.2025.05.30.20.59.01 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 30 May 2025 20:59:01 -0700 (PDT) From: softworkz X-Google-Original-From: softworkz Message-Id: <32cd61ebd4196f09ca2ed1d1c062ac2370844f75.1748663925.git.ffmpegagent@gmail.com> In-Reply-To: References: Date: Sat, 31 May 2025 03:58:45 +0000 Fcc: Sent MIME-Version: 1.0 To: ffmpeg-devel@ffmpeg.org Subject: [FFmpeg-devel] [PATCH v2 2/2] fftools/resman: uncompress to actual-size memory buffers 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: softworkz 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: From: softworkz Signed-off-by: softworkz --- fftools/resources/resman.c | 51 +++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 15 deletions(-) diff --git a/fftools/resources/resman.c b/fftools/resources/resman.c index f098bd6687..e3e082abbf 100644 --- a/fftools/resources/resman.c +++ b/fftools/resources/resman.c @@ -67,48 +67,69 @@ static ResourceManagerContext *resman_ctx = NULL; static int decompress_gzip(ResourceManagerContext *ctx, uint8_t *in, unsigned in_len, char **out, size_t *out_len) { - z_stream strm; - unsigned chunk = 65534; + z_stream strm = { 0 }; + uint8_t dummy[4096]; + size_t uncompressed_size; int ret; uint8_t *buf; *out = NULL; - memset(&strm, 0, sizeof(strm)); + + // 15 + 16 tells zlib to detect GZIP or zlib automatically + ret = inflateInit2(&strm, 15 + 16); + if (ret != Z_OK) { + av_log(ctx, AV_LOG_ERROR, "Error during zlib initialization: %s\n", strm.msg); + return AVERROR(ENOSYS); + } + + strm.avail_in = in_len; + strm.next_in = in; + + do { + strm.avail_out = sizeof(dummy); + strm.next_out = dummy; + + ret = inflate(&strm, Z_NO_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) { + av_log(ctx, AV_LOG_ERROR, "Inflate failed (1): %d, %s\n", ret, strm.msg); + inflateEnd(&strm); + return AVERROR(EINVAL); + } + } while (ret != Z_STREAM_END); + + uncompressed_size = strm.total_out; // Allocate output buffer with extra byte for null termination - buf = av_mallocz(chunk + 1); + buf = av_mallocz(uncompressed_size + 1); if (!buf) { av_log(ctx, AV_LOG_ERROR, "Failed to allocate decompression buffer\n"); + inflateEnd(&strm); return AVERROR(ENOMEM); } - // 15 + 16 tells zlib to detect GZIP or zlib automatically - ret = inflateInit2(&strm, 15 + 16); + ret = inflateReset(&strm); if (ret != Z_OK) { - av_log(ctx, AV_LOG_ERROR, "Error during zlib initialization: %s\n", strm.msg); + av_log(ctx, AV_LOG_ERROR, "inflateReset failed: %s\n", strm.msg); av_free(buf); return AVERROR(ENOSYS); } strm.avail_in = in_len; strm.next_in = in; - strm.avail_out = chunk; + strm.avail_out = uncompressed_size; strm.next_out = buf; ret = inflate(&strm, Z_FINISH); if (ret != Z_OK && ret != Z_STREAM_END) { - av_log(ctx, AV_LOG_ERROR, "Inflate failed: %d, %s\n", ret, strm.msg); + av_log(ctx, AV_LOG_ERROR, "Inflate failed (2): %d, %s\n", ret, strm.msg); inflateEnd(&strm); av_free(buf); - return (ret == Z_STREAM_END) ? Z_OK : ((ret == Z_OK) ? Z_BUF_ERROR : ret); + return AVERROR(EINVAL); } - if (strm.avail_out == 0) { - // TODO: Error or loop decoding? - av_log(ctx, AV_LOG_WARNING, "Decompression buffer may be too small\n"); - } + av_assert0(strm.avail_out == 0); - *out_len = chunk - strm.avail_out; + *out_len = uncompressed_size; buf[*out_len] = 0; // Ensure null termination inflateEnd(&strm); -- ffmpeg-codebot _______________________________________________ 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".