From 4a875dca4170f8a21b3e043d1bfb3d10d90e5822 Mon Sep 17 00:00:00 2001 From: David Racine Date: Wed, 24 Jun 2026 12:22:40 -0400 Subject: [PATCH] fix(menu): guard backend name lookups against unknown backends (#6806) GetAvailableAudioBackends()/GetAvailableWindowBackends() can report a backend that has no entry in the static name maps (e.g. a newly added or platform- specific backend), which made audioBackendsMap.at()/windowBackendsMap.at() throw std::out_of_range and crash. Look up with find() (single lookup) and skip backends that aren't named instead of dereferencing a missing key. Co-authored-by: Claude Opus 4.8 --- soh/soh/SohGui/Menu.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/soh/soh/SohGui/Menu.cpp b/soh/soh/SohGui/Menu.cpp index 594bb544c8..42227d7f9a 100644 --- a/soh/soh/SohGui/Menu.cpp +++ b/soh/soh/SohGui/Menu.cpp @@ -102,7 +102,9 @@ void Menu::RemoveSidebarSearch() { void Menu::UpdateAudioBackendObjects() { availableAudioBackends = Ship::Context::GetRawInstance()->GetAudio()->GetAvailableAudioBackends(); for (auto& backend : *availableAudioBackends) { - availableAudioBackendsMap[backend] = audioBackendsMap.at(backend); + if (auto it = audioBackendsMap.find(backend); it != audioBackendsMap.end()) { + availableAudioBackendsMap[backend] = it->second; + } } } @@ -118,7 +120,10 @@ void Menu::UpdateWindowBackendObjects() { availableWindowBackends = Ship::Context::GetRawInstance()->GetWindow()->GetAvailableWindowBackends(); for (auto& backend : *availableWindowBackends) { - availableWindowBackendsMap[(Fast::WindowBackend)backend] = windowBackendsMap.at((Fast::WindowBackend)backend); + auto windowBackend = (Fast::WindowBackend)backend; + if (auto it = windowBackendsMap.find(windowBackend); it != windowBackendsMap.end()) { + availableWindowBackendsMap[windowBackend] = it->second; + } } }