diff --git a/krArc/krarc.cpp b/krArc/krarc.cpp index bcbb0427fdb56eb493498aa3d49c7eecec9e7b1d..0ddbf893b4d2af8a887f1f36c0f4f2ffdbabd5b1 100644 --- a/krArc/krarc.cpp +++ b/krArc/krarc.cpp @@ -1738,7 +1738,9 @@ void kio_krarcProtocol::checkIf7zIsEncrypted(bool &encrypted, QString fileName) lastData = encryptedArchPath = ""; KrLinecountingProcess proc; - proc << a7zExecutable << "-y" << "t" << fileName; + // Note: That command uses information given in a comment from + // https://stackoverflow.com/questions/5248572/how-do-i-know-if-7zip-used-aes256 + proc << a7zExecutable << "l" << "-slt" << fileName; connect(&proc, &KrLinecountingProcess::newOutputData, this, &kio_krarcProtocol::check7zOutputForPassword); proc.start(); proc.waitForFinished(); @@ -1763,13 +1765,14 @@ void kio_krarcProtocol::check7zOutputForPassword(KProcess * proc, QByteArray & b lastData = lines[ lines.count() - 1 ]; for (int i = 0; i != lines.count(); i++) { QString line = lines[ i ].trimmed().toLower(); - int ndx = line.indexOf("testing"); + int ndx = line.indexOf("listing"); // Reminder: Lower-case letters are used if (ndx >= 0) line.truncate(ndx); if (line.isEmpty()) continue; - if (line.contains("password") && line.contains("enter")) { + if ((line.contains("password") && line.contains("enter")) || + line == QStringLiteral("encrypted = +")) { KRDEBUG("Encrypted 7z archive found!"); encrypted = true; proc->kill(); diff --git a/krusader/Archive/kr7zencryptionchecker.cpp b/krusader/Archive/kr7zencryptionchecker.cpp index cfc8d193c246ee20adc78924221c3f8e9caa2619..6f530f74cb0e131ac506e26d6dc9fb4cadf8431b 100644 --- a/krusader/Archive/kr7zencryptionchecker.cpp +++ b/krusader/Archive/kr7zencryptionchecker.cpp @@ -47,15 +47,17 @@ void Kr7zEncryptionChecker::receivedOutput() lastData = lines[ lines.count() - 1 ]; for (int i = 0; i != lines.count(); i++) { QString line = lines[ i ].trimmed().toLower(); - int ndx = line.indexOf("testing"); + int ndx = line.indexOf("listing"); // Reminder: Lower-case letters are used if (ndx >= 0) line.truncate(ndx); if (line.isEmpty()) continue; - if (line.contains("password") && line.contains("enter")) { + if ((line.contains("password") && line.contains("enter")) || + line == QStringLiteral("encrypted = +")) { encrypted = true; ::kill(- pid(), SIGKILL); // kill the whole process group by giving the negative PID + break; } } } diff --git a/krusader/Archive/krarchandler.cpp b/krusader/Archive/krarchandler.cpp index c64a8e9942f61ce0cc6a18ff3160a60dcfcafe3e..7834b43515124b631168e3f95715643906ed5726 100644 --- a/krusader/Archive/krarchandler.cpp +++ b/krusader/Archive/krarchandler.cpp @@ -708,8 +708,9 @@ void KrArcHandler::checkIf7zIsEncrypted(bool &encrypted, QString fileName) Kr7zEncryptionChecker proc; // TODO incorporate all this in Kr7zEncryptionChecker - proc << find7zExecutable() << "-y" << "t"; - proc << fileName; + // Note: That command uses information given in a comment from + // https://stackoverflow.com/questions/5248572/how-do-i-know-if-7zip-used-aes256 + proc << find7zExecutable() << "l" << "-slt" << fileName; proc.start(); proc.waitForFinished(); encrypted = proc.isEncrypted();