# UNDF: UNDF-2026-000000937 --- a/src/surroundings_menu.cpp +++ b/src/surroundings_menu.cpp @@ -1,5 +1,6 @@ // ... (includes) #include +#include // In item_tab_data::add_item_recursive() // BEFORE (CWE-407): item_order is std::vector with std::find @@ -241,7 +242,8 @@ void item_tab_data::add_item_recursive( std::vector &item_order, const item *it, const tripoint_rel_ms &relative_pos ) { + // Also pass item_order_set for O(1) membership check const std::string name = it->tname(); - if( std::find( item_order.begin(), item_order.end(), name ) == item_order.end() ) { + if( item_order_set.find( name ) == item_order_set.end() ) { item_order.push_back( name ); + item_order_set.insert( name ); items[name] = map_entity_stack( it, relative_pos, it->count() ); } else { @@ -259,6 +261,7 @@ void item_tab_data::find_nearby_items( const Character &you, map &m ) { std::vector item_order; + // Add std::unordered_set item_order_set as class member // Similarly in terfurn_tab_data::add_terfurn() // BEFORE: @@ -585,7 +588,8 @@ void terfurn_tab_data::add_terfurn( std::vector &item_order, const map_data_common_t *terfurn, const tripoint_rel_ms &relative_pos ) { const std::string name = terfurn->name(); - if( std::find( item_order.begin(), item_order.end(), name ) == item_order.end() ) { + if( item_order_set.find( name ) == item_order_set.end() ) { item_order.push_back( name ); + item_order_set.insert( name ); terfurns[name] = map_entity_stack( terfurn, relative_pos ); } else {