From e1c830dde0a7be74cc6190c9047a9af06492f21d Mon Sep 17 00:00:00 2001 From: Mike Griese Date: Thu, 7 Oct 2021 12:18:11 -0500 Subject: [PATCH] Make sure all the commandlines are fully qualified (#11437) This was originally in #11308. Thought we should check it in for 1.12 even though that won't merge this release. Should slightly mitigate the number of users that see this warning. --- src/cascadia/TerminalSettingsModel/Profile.h | 2 +- src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp | 6 +++++- src/cascadia/TerminalSettingsModel/userDefaults.json | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/cascadia/TerminalSettingsModel/Profile.h b/src/cascadia/TerminalSettingsModel/Profile.h index 9e54b0e7e..f69471332 100644 --- a/src/cascadia/TerminalSettingsModel/Profile.h +++ b/src/cascadia/TerminalSettingsModel/Profile.h @@ -125,7 +125,7 @@ namespace winrt::Microsoft::Terminal::Settings::Model::implementation INHERITABLE_SETTING(Model::Profile, hstring, Padding, DEFAULT_PADDING); - INHERITABLE_SETTING(Model::Profile, hstring, Commandline, L"cmd.exe"); + INHERITABLE_SETTING(Model::Profile, hstring, Commandline, L"%SystemRoot%\\System32\\cmd.exe"); INHERITABLE_SETTING(Model::Profile, hstring, StartingDirectory); INHERITABLE_SETTING(Model::Profile, Microsoft::Terminal::Control::TextAntialiasingMode, AntialiasingMode, Microsoft::Terminal::Control::TextAntialiasingMode::Grayscale); diff --git a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp index b0cfadfbd..8265b338a 100644 --- a/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp +++ b/src/cascadia/TerminalSettingsModel/WslDistroGenerator.cpp @@ -37,7 +37,11 @@ std::wstring_view WslDistroGenerator::GetNamespace() const noexcept static winrt::com_ptr makeProfile(const std::wstring& distName) { const auto WSLDistro{ CreateDynamicProfile(distName) }; - WSLDistro->Commandline(winrt::hstring{ L"wsl.exe -d " + distName }); + // GH#11096 - make sure the WSL path starts explicitly with + // C:\Windows\System32. Don't want someone path hijacking wsl.exe. + std::wstring command{}; + THROW_IF_FAILED(wil::GetSystemDirectoryW(command)); + WSLDistro->Commandline(winrt::hstring{ command + L"\\wsl.exe -d " + distName }); WSLDistro->DefaultAppearance().ColorSchemeName(L"Campbell"); WSLDistro->StartingDirectory(winrt::hstring{ DEFAULT_STARTING_DIRECTORY }); WSLDistro->Icon(L"ms-appx:///ProfileIcons/{9acb9455-ca41-5af7-950f-6bca1bc9722f}.png"); diff --git a/src/cascadia/TerminalSettingsModel/userDefaults.json b/src/cascadia/TerminalSettingsModel/userDefaults.json index 28ed3beef..59fa13a6d 100644 --- a/src/cascadia/TerminalSettingsModel/userDefaults.json +++ b/src/cascadia/TerminalSettingsModel/userDefaults.json @@ -10,13 +10,13 @@ { "guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}", "name": "Windows PowerShell", - "commandline": "powershell.exe", + "commandline": "%SystemRoot%\\System32\\WindowsPowerShell\\v1.0\\powershell.exe", "hidden": false }, { // "name" is filled in by CascadiaSettings as a localized string. "guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}", - "commandline": "cmd.exe", + "commandline": "%SystemRoot%\\System32\\cmd.exe", "hidden": false } ]