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 <noreply@anthropic.com>
This commit is contained in:
David Racine
2026-06-24 12:22:40 -04:00
committed by GitHub
parent 0d2346d322
commit 4a875dca41
+7 -2
View File
@@ -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;
}
}
}