From 907e9e8211a45247d9c6b7d1df929a269da77eda Mon Sep 17 00:00:00 2001 From: "Dustin L. Howett" Date: Thu, 22 Aug 2024 11:59:35 -0500 Subject: [PATCH] Guard Control UpdateAppearance/Settings against UAF --- src/cascadia/TerminalControl/TermControl.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/cascadia/TerminalControl/TermControl.cpp b/src/cascadia/TerminalControl/TermControl.cpp index 045762a3ac0..8f8f9f0df66 100644 --- a/src/cascadia/TerminalControl/TermControl.cpp +++ b/src/cascadia/TerminalControl/TermControl.cpp @@ -717,11 +717,14 @@ namespace winrt::Microsoft::Terminal::Control::implementation // terminal. co_await wil::resume_foreground(Dispatcher()); - _core.UpdateSettings(settings, unfocusedAppearance); + if (auto strongThis{ weakThis.get() }) + { + _core.UpdateSettings(settings, unfocusedAppearance); - _UpdateSettingsFromUIThread(); + _UpdateSettingsFromUIThread(); - _UpdateAppearanceFromUIThread(_focused ? _core.FocusedAppearance() : _core.UnfocusedAppearance()); + _UpdateAppearanceFromUIThread(_focused ? _core.FocusedAppearance() : _core.UnfocusedAppearance()); + } } // Method Description: @@ -730,10 +733,15 @@ namespace winrt::Microsoft::Terminal::Control::implementation // - newAppearance: the new appearance to set winrt::fire_and_forget TermControl::UpdateAppearance(IControlAppearance newAppearance) { + auto weakThis{ get_weak() }; + // Dispatch a call to the UI thread co_await wil::resume_foreground(Dispatcher()); - _UpdateAppearanceFromUIThread(newAppearance); + if (auto strongThis{ weakThis.get() }) + { + _UpdateAppearanceFromUIThread(newAppearance); + } } // Method Description: