From 2f002290411cae9a414c4dfccc93bb777a9482d0 Mon Sep 17 00:00:00 2001 From: Jacob Keeler Date: Fri, 4 Feb 2022 10:13:10 -0500 Subject: Check that message code exists before accessing (#3852) An empty entry in the messages table would be created if the key being searched for didn't exist. This adds a check before accessing this data so that an entry isn't created accidentally --- src/components/policy/policy_external/src/cache_manager.cc | 9 +++++++-- src/components/policy/policy_regular/src/cache_manager.cc | 9 +++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/components/policy/policy_external/src/cache_manager.cc b/src/components/policy/policy_external/src/cache_manager.cc index 07f2df1991..d5e1e61966 100644 --- a/src/components/policy/policy_external/src/cache_manager.cc +++ b/src/components/policy/policy_external/src/cache_manager.cc @@ -1695,8 +1695,13 @@ std::vector CacheManager::GetUserFriendlyMsg( std::vector::const_iterator it_end = msg_codes.end(); sync_primitives::AutoLock auto_lock(cache_lock_); for (; it != it_end; ++it) { - policy_table::MessageLanguages msg_languages = - (*pt_->policy_table.consumer_friendly_messages->messages)[*it]; + auto messages = pt_->policy_table.consumer_friendly_messages->messages; + auto messages_it = messages->find(*it); + if (messages->end() == messages_it) { + SDL_LOG_ERROR("No entry found for message code: " << *it); + continue; + } + policy_table::MessageLanguages msg_languages = messages_it->second; // If message has no records with required language, fallback language // should be used instead. diff --git a/src/components/policy/policy_regular/src/cache_manager.cc b/src/components/policy/policy_regular/src/cache_manager.cc index cf4164d133..9cce86322a 100644 --- a/src/components/policy/policy_regular/src/cache_manager.cc +++ b/src/components/policy/policy_regular/src/cache_manager.cc @@ -987,8 +987,13 @@ std::vector CacheManager::GetUserFriendlyMsg( std::vector::const_iterator it_end = msg_codes.end(); sync_primitives::AutoLock auto_lock(cache_lock_); for (; it != it_end; ++it) { - policy_table::MessageLanguages msg_languages = - (*pt_->policy_table.consumer_friendly_messages->messages)[*it]; + auto messages = pt_->policy_table.consumer_friendly_messages->messages; + auto messages_it = messages->find(*it); + if (messages->end() == messages_it) { + SDL_LOG_ERROR("No entry found for message code: " << *it); + continue; + } + policy_table::MessageLanguages msg_languages = messages_it->second; policy_table::MessageString message_string; -- cgit v1.2.1