簡體   English   中英

使用狀態為-1(TINFL_STATUS_FAILED)的miniz出口解壓縮zip文件

[英]Decompressing zip file with miniz exits with status -1 (TINFL_STATUS_FAILED)

我需要使用miniz庫解壓縮項目中的一些zip文件。 問題是功能

tinfl_decompress

始終以狀態TINFL_STATUS_FAILED退出。

我已經進行了一些調試,並在miniz.c中找到了令人反感的代碼行:

第1452行:

counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8));

計數器設置為1;

第1453行:

if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) counter |= (((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4)))));

(((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (size_t)(1U << (8U + (r->m_zhdr0 >> 4)))))計算為假; 但是,由於將計數器設置為1,因此計數器保持等於1。

1454行:

if (counter) { TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); }

由於計數器值為1,因此將調用宏TINFL_CR_RETURN_FOREVER。 這樣的宏跳轉到標簽common_exit

除了我的項目外,我還使用庫提供的示例測試了miniz庫。 具體來說,我嘗試解壓縮自己的個人zip歸檔文件以及miniz庫附帶的example5的example2生成的壓縮文件。

在命令提示符處發出以下命令

example5.exe d __mz_example2_test__.zip __mz_example2_test__.decompress

生成以下輸出:

miniz.c example5 (demonstrates tinfl/tdefl)
Mode: d, Level: 9
Input File: "__mz_example2_test__.zip"
Output File: "__mz_example2_test__.decompress"
Input file size: 33768
tinfl_decompress() failed with status -1!

我怎樣才能解決這個問題? 我究竟做錯了什么?

1452行正在尋找zlib標頭。 zlib格式不是zip格式。 您將需要編寫自己的zip格式解碼器,然后在原始充氣模式下使用miniz,該模式不查找zlib標頭,而是在解碼zip標頭時在找到的位置解碼原始放氣數據。

或者,您可以只使用libzip ,它可以為您完成所有這些工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM