From 5caea5ad9b39e0a28a9fe9b33c5dc7f67a3ac552 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Sun, 21 Apr 2019 18:34:17 +0200 Subject: [PATCH] Ref T620, check for empty string as path, QDir("") exists --- src/blackgui/components/flightplancomponent.cpp | 14 ++++++++++++++ src/blackmisc/directories.cpp | 1 + src/blackmisc/directoryutils.cpp | 8 +++++++- src/blackmisc/directoryutils.h | 3 +++ 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/blackgui/components/flightplancomponent.cpp b/src/blackgui/components/flightplancomponent.cpp index 0aa2828dc..6e4b04f10 100644 --- a/src/blackgui/components/flightplancomponent.cpp +++ b/src/blackgui/components/flightplancomponent.cpp @@ -46,6 +46,7 @@ #include #include #include +#include #include using namespace BlackMisc; @@ -535,6 +536,19 @@ namespace BlackGui m = CStatusMessage(this, CStatusMessage::SeverityDebug, u"Save canceled", true); break; } + + QFileInfo fi(fileName); + QDir fpDir = fi.absoluteDir(); + if (CDirectoryUtils::isInApplicationDirectory(fpDir.absolutePath())) + { + const int ret = QMessageBox::warning(this, "swift flight plan", + "You try to save inside the swift directory '" + fpDir.absolutePath() + + "'\n\nThis is not recommended!" + "\n\nDo you want to really do this?", + QMessageBox::Save | QMessageBox::Cancel); + if (ret != QMessageBox::Save) { return; } + } + CFlightPlan fp; this->validateAndInitializeFlightPlan(fp); // get data diff --git a/src/blackmisc/directories.cpp b/src/blackmisc/directories.cpp index 7bc83f936..293e18e61 100644 --- a/src/blackmisc/directories.cpp +++ b/src/blackmisc/directories.cpp @@ -96,6 +96,7 @@ namespace BlackMisc QString CDirectories::existingOrDefaultDir(const QString &checkDir, const QString &defaultDir) const { + if (checkDir.isEmpty()) { return defaultDir; } // empty dir returns true ???? const QDir d(checkDir); if (d.exists()) { return checkDir; } return defaultDir; diff --git a/src/blackmisc/directoryutils.cpp b/src/blackmisc/directoryutils.cpp index 56dc56ccb..2db4443cd 100644 --- a/src/blackmisc/directoryutils.cpp +++ b/src/blackmisc/directoryutils.cpp @@ -39,6 +39,12 @@ namespace BlackMisc return binDir; } + bool CDirectoryUtils::isInApplicationDirectory(const QString &path) + { + if (path.isEmpty()) { return false; } + return path.contains(qApp->applicationDirPath(), CFileUtils::osFileNameCaseSensitivity()); + } + const QString &CDirectoryUtils::pluginsDirectory() { static const QString pDir(CFileUtils::appendFilePaths(binDirectory(), "plugins")); @@ -386,7 +392,7 @@ namespace BlackMisc { const QStringList pathes(QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation)); QString d = pathes.first(); - d = QDir::cleanPath(d + QDir::separator() + "swift"); + d = QDir::cleanPath(CFileUtils::appendFilePaths(d, "swift")); QDir dir(d); if (dir.exists()) { return dir.absolutePath(); } return pathes.first(); diff --git a/src/blackmisc/directoryutils.h b/src/blackmisc/directoryutils.h index 16b03840b..dc9b864c8 100644 --- a/src/blackmisc/directoryutils.h +++ b/src/blackmisc/directoryutils.h @@ -37,6 +37,9 @@ namespace BlackMisc //! \see https://dev.swift-project.org/w/dev/swiftpc/dirstructure/ static const QString &binDirectory(); + //! Path in application directory + static bool isInApplicationDirectory(const QString &path); + //! Plugins directory static const QString &pluginsDirectory();