From 4fe6adb2dd0aa126753ee99426780570aef9b897 Mon Sep 17 00:00:00 2001 From: Peter Nelson Date: Mon, 30 Jun 2025 21:45:08 +0100 Subject: [PATCH] Fix c2d4098afa: Crash when accessing unconfigurable badge feature. (#14403) Some features support badges but do not have a way to configure them. Accessing these features could crash the game. --- src/newgrf_badge_config.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/newgrf_badge_config.cpp b/src/newgrf_badge_config.cpp index a1da087efb..c97d8427bd 100644 --- a/src/newgrf_badge_config.cpp +++ b/src/newgrf_badge_config.cpp @@ -118,14 +118,16 @@ void ResetBadgeClassConfiguration(GrfSpecFeature feature) */ std::pair GetBadgeClassConfigItem(GrfSpecFeature feature, std::string_view label) { - auto config = GetBadgeClassConfiguration(feature); - auto found = std::ranges::find(config, label, &BadgeClassConfigItem::label); - if (found == std::end(config)) { - return {BadgeClassConfig::EMPTY_CONFIG_ITEM, 0}; + if (BadgeClassConfig::CONFIGURABLE_FEATURES.Test(feature)) { + auto config = GetBadgeClassConfiguration(feature); + auto found = std::ranges::find(config, label, &BadgeClassConfigItem::label); + if (found != std::end(config)) { + /* Sort order is simply the position in the configuration list. */ + return {*found, static_cast(std::distance(std::begin(config), found))}; + } } - /* Sort order is simply the position in the configuration list. */ - return {*found, static_cast(std::distance(std::begin(config), found))}; + return {BadgeClassConfig::EMPTY_CONFIG_ITEM, 0}; } /**