From 6e2d3f4e7e952a342ed91bf93d4487bd51a331ea Mon Sep 17 00:00:00 2001 From: Kurt Hindenburg Date: Sat, 8 Oct 2016 16:32:01 -0400 Subject: [PATCH] Validate initial working directory Profile entry Verify the Profile's initial working directory exists and is a dir This applies to KonsolePart as well as Konsole --- src/Part.cpp | 1 + src/Session.cpp | 17 ++++++++++++++++- src/Session.h | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/Part.cpp b/src/Part.cpp index 07f8cf7b..7968176f 100644 --- a/src/Part.cpp +++ b/src/Part.cpp @@ -139,6 +139,7 @@ void Part::showShellInDir(const QString& dir) if (activeSession()->isRunning()) return; + // All other checking is done in setInitialWorkingDirectory() if (!dir.isEmpty()) activeSession()->setInitialWorkingDirectory(dir); diff --git a/src/Session.cpp b/src/Session.cpp index 68f0ffcd..302bddce 100644 --- a/src/Session.cpp +++ b/src/Session.cpp @@ -264,7 +264,7 @@ void Session::setArguments(const QStringList& arguments) void Session::setInitialWorkingDirectory(const QString& dir) { - _initialWorkingDir = KShell::tildeExpand(ShellCommand::expand(dir)); + _initialWorkingDir = validDirectory(KShell::tildeExpand(ShellCommand::expand(dir))); } QString Session::currentWorkingDirectory() @@ -1550,6 +1550,21 @@ void Session::restoreSession(KConfigGroup& group) if (!value.isEmpty()) setCodec(value.toUtf8()); } +QString Session::validDirectory(const QString& dir) const +{ + QString validDir = dir; + if (validDir.isEmpty()) { + validDir = QDir::currentPath(); + } + + const QFileInfo fi(validDir); + if (!fi.exists() || !fi.isDir()) { + validDir = QDir::homePath(); + } + + return validDir; +} + SessionGroup::SessionGroup(QObject* parent) : QObject(parent), _masterMode(0) { diff --git a/src/Session.h b/src/Session.h index 397b5156..30248b38 100644 --- a/src/Session.h +++ b/src/Session.h @@ -730,6 +730,8 @@ private: bool updateForegroundProcessInfo(); void updateWorkingDirectory(); + QString validDirectory(const QString& directory) const; + QUuid _uniqueIdentifier; // SHELL_SESSION_ID Pty* _shellProcess;