mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-06-26 18:51:56 -04:00
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:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user