[英]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.