From cb4dff307971d9def2cd96c1dd2e560b0d1689a3 Mon Sep 17 00:00:00 2001 From: gongheng Date: Fri, 21 Nov 2025 13:37:38 +0800 Subject: [PATCH] Fix: [zipplugin] Show password error. -- When enter the right password, show password error. -- Not judge the Second password, so add code logic the adjust it. Log: fix issue Bug: https://pms.uniontech.com/bug-view-329305.html --- 3rdparty/libzipplugin/libzipplugin.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/3rdparty/libzipplugin/libzipplugin.cpp b/3rdparty/libzipplugin/libzipplugin.cpp index eec1c3d8..fc41c718 100644 --- a/3rdparty/libzipplugin/libzipplugin.cpp +++ b/3rdparty/libzipplugin/libzipplugin.cpp @@ -171,6 +171,7 @@ PluginFinishType LibzipPlugin::extractFiles(const QList &files, const if (options.bAllExtract) { // 全部解压 qlonglong qExtractSize = 0; zip_int64_t nofEntries = zip_get_num_entries(archive, 0); + zip_int64_t lastNeedPasswordIndex = -1; for (zip_int64_t i = 0; i < nofEntries; ++i) { if (QThread::currentThread()->isInterruptionRequested()) { m_bCancel = false; // 重置标志位 @@ -195,14 +196,16 @@ PluginFinishType LibzipPlugin::extractFiles(const QList &files, const zip_close(archive); return PFT_Cancel; } else { // 处理错误 - // 密码错误, 给出错误提示 - if(ET_WrongPassword == m_eErrorType && !m_strPassword.isEmpty()) { - zip_close(archive); - m_strPassword = ""; - return PFT_Error; - } // 判断是否需要密码,若需要密码,弹出密码输入对话框,用户输入密码之后,重新解压当前文件 if (ET_WrongPassword == m_eErrorType || ET_NeedPassword == m_eErrorType) { + + // 询问输入密码后,仍然输入错误密码,则直接返回,给出错误提示 + if (lastNeedPasswordIndex == i) { + zip_close(archive); + m_strPassword = ""; + return PFT_Error; + } + PasswordNeededQuery query(strFileName); emit signalQuery(&query); query.waitForResponse(); @@ -214,6 +217,7 @@ PluginFinishType LibzipPlugin::extractFiles(const QList &files, const } else { setPassword(query.password()); zip_set_default_password(archive, m_strPassword.toUtf8().constData()); + lastNeedPasswordIndex = i; i--; } } else {