From 68825417f52af6eababb0bc8a56051510ef4dbcd Mon Sep 17 00:00:00 2001 From: ZhangTingan Date: Tue, 19 May 2026 15:30:40 +0800 Subject: [PATCH] fix: handle wrong password when processing longname-extract Log: as title bug: https://pms.uniontech.com//bug-view-361845.html --- .../archiveinterface/cliinterface.cpp | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/3rdparty/interface/archiveinterface/cliinterface.cpp b/3rdparty/interface/archiveinterface/cliinterface.cpp index 4ece3809..e1016572 100644 --- a/3rdparty/interface/archiveinterface/cliinterface.cpp +++ b/3rdparty/interface/archiveinterface/cliinterface.cpp @@ -221,7 +221,10 @@ PluginFinishType CliInterface::extractFiles(const QList &files, const } if (bHandleLongName) { if (!handleLongNameExtract(m_files)) { - m_eErrorType = ET_FileWriteError; + if (m_eErrorType == ET_NoError) { + m_eErrorType = ET_FileWriteError; + } + emit signalFinished(PFT_Error); return PFT_Error; } } @@ -263,7 +266,10 @@ PluginFinishType CliInterface::extractFiles(const QList &files, const if (bHandleLongName) { if (!handleLongNameExtract(arcData.mapFileEntry.values())) { - m_eErrorType = ET_FileWriteError; + if (m_eErrorType == ET_NoError) { + m_eErrorType = ET_FileWriteError; + } + emit signalFinished(PFT_Error); return PFT_Error; } } @@ -772,9 +778,14 @@ bool CliInterface::runProcess(const QString &programName, const QStringList &arg if (exitCode != 0) { emit signalprogress(100); emit signalFinished(PFT_Error); + return; } deleteProcess(); - extractFiles(m_files, m_extractOptions, property("lnfs").toBool()); + PluginFinishType ret = extractFiles(m_files, m_extractOptions, property("lnfs").toBool()); + if (ret == PFT_Error) { + emit signalprogress(100); + emit signalFinished(PFT_Error); + } } }); } @@ -1357,6 +1368,14 @@ bool CliInterface::handleLongNameExtract(const QList &files) pProcess->start(); pProcess->waitForFinished(-1); + if (pProcess->exitCode() != 0) { + QByteArray output = pProcess->readAllStandardOutput(); + if (output.contains("Wrong password")) { + m_eErrorType = ET_WrongPassword; + return false; + } + } + bPasswordEntered = true; break; }