diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/utils/GpgUtils.cpp | 2 | ||||
-rw-r--r-- | src/ui/UserInterfaceUtils.cpp | 32 | ||||
-rw-r--r-- | src/ui/main_window/KeyMgmt.cpp | 27 |
3 files changed, 44 insertions, 17 deletions
diff --git a/src/core/utils/GpgUtils.cpp b/src/core/utils/GpgUtils.cpp index 75041eca..0d00b13e 100644 --- a/src/core/utils/GpgUtils.cpp +++ b/src/core/utils/GpgUtils.cpp @@ -131,7 +131,7 @@ auto SetExtensionOfOutputFile(const QString& path, GpgOperation opera, return file_info.absolutePath() + "/" + file_info.completeBaseName() + "." + new_extension; } - return file_info.absolutePath() + "/" + file_info.baseName(); + return file_info.absolutePath() + "/" + file_info.completeBaseName(); } auto SetExtensionOfOutputFileForArchive(const QString& path, GpgOperation opera, diff --git a/src/ui/UserInterfaceUtils.cpp b/src/ui/UserInterfaceUtils.cpp index b915b5ab..c66b9845 100644 --- a/src/ui/UserInterfaceUtils.cpp +++ b/src/ui/UserInterfaceUtils.cpp @@ -28,6 +28,8 @@ #include "UserInterfaceUtils.h" +#include <cstddef> + #include "core/GpgConstants.h" #include "core/function/CoreSignalStation.h" #include "core/function/gpg/GpgKeyGetter.h" @@ -273,19 +275,25 @@ void CommonUtils::SlotImportKeys(QWidget *parent, const QString &in_buffer) { } void CommonUtils::SlotImportKeyFromFile(QWidget *parent) { - auto file_name = QFileDialog::getOpenFileName(this, tr("Open Key"), QString(), - tr("Key Files")) + - " (*.asc *.txt);;" + tr("Keyring files") + - " (*.gpg);;All Files (*)"; - if (!file_name.isNull()) { - QByteArray key_buffer; - if (!ReadFile(file_name, key_buffer)) { - QMessageBox::critical(nullptr, tr("File Open Failed"), - tr("Failed to open file: ") + file_name); - return; - } - SlotImportKeys(parent, key_buffer); + auto file_name = + QFileDialog::getOpenFileName(parent, tr("Open Key"), QString(), + tr("Keyring files") + " (*.asc *.gpg)"); + if (file_name.isEmpty()) return; + + QFileInfo file_info(file_name); + if (file_info.size() > static_cast<qint64>(1024 * 1024)) { + QMessageBox::critical(parent, tr("Error"), + tr("The target file is too large for a keyring.")); + return; + } + + QByteArray key_buffer; + if (!ReadFile(file_name, key_buffer)) { + QMessageBox::critical(nullptr, tr("File Open Failed"), + tr("Failed to open file: ") + file_name); + return; } + SlotImportKeys(parent, key_buffer); } void CommonUtils::SlotImportKeyFromKeyServer(QWidget *parent) { diff --git a/src/ui/main_window/KeyMgmt.cpp b/src/ui/main_window/KeyMgmt.cpp index c9353b90..67150d85 100644 --- a/src/ui/main_window/KeyMgmt.cpp +++ b/src/ui/main_window/KeyMgmt.cpp @@ -529,14 +529,33 @@ void KeyMgmt::SlotExportAsOpenSSHFormat() { void KeyMgmt::SlotImportKeyPackage() { auto key_package_file_name = QFileDialog::getOpenFileName( - this, tr("Import Key Package"), {}, - tr("Key Package") + " (*.gfepack);;All Files (*)"); + this, tr("Import Key Package"), {}, tr("Key Package") + " (*.gfepack)"); + + if (key_package_file_name.isEmpty()) return; + + // max file size is 32 mb + QFileInfo key_package_file_info(key_package_file_name); + if (key_package_file_info.size() > static_cast<qint64>(32 * 1024 * 1024)) { + QMessageBox::critical( + this, tr("Error"), + tr("The target file is too large for a key package.")); + return; + } auto key_file_name = QFileDialog::getOpenFileName( this, tr("Import Key Package Passphrase File"), {}, - tr("Key Package Passphrase File") + " (*.key);;All Files (*)"); + tr("Key Package Passphrase File") + " (*.key)"); - if (key_package_file_name.isEmpty() || key_file_name.isEmpty()) return; + if (key_file_name.isEmpty()) return; + + // max file size is 1 mb + QFileInfo key_file_info(key_file_name); + if (key_file_info.size() > static_cast<qint64>(1024 * 1024)) { + QMessageBox::critical( + this, tr("Error"), + tr("The target file is too large for a key package passphrase.")); + return; + } GF_UI_LOG_INFO("importing key package: {}", key_package_file_name); CommonUtils::WaitForOpera( |