summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoroy <tom_adams@web.de>2021-12-10 14:27:50 +0100
committerGitHub <noreply@github.com>2021-12-10 14:27:50 +0100
commitd3f390821bb9fea1c7998b76ce1025e280eb0f3a (patch)
treee5c8763e77ff00182dbcd64f1455b7d616455feb
parente3b05383bcd2de769d68fcc04e8e13370daa6a66 (diff)
parentf3b78546960d9b3899978e7d0ce2fee821e5dfe9 (diff)
Merge pull request #2988 from Robyt3/issue2967
Fix default filter initialization, fix potential OOB access to filter array
-rw-r--r--src/game/client/components/menus.h8
-rw-r--r--src/game/client/components/menus_browser.cpp7
2 files changed, 10 insertions, 5 deletions
diff --git a/src/game/client/components/menus.h b/src/game/client/components/menus.h
index 3e135e614..5ab6ea302 100644
--- a/src/game/client/components/menus.h
+++ b/src/game/client/components/menus.h
@@ -628,17 +628,17 @@ private:
static CColumn ms_aBrowserCols[NUM_BROWSER_COLS];
static CColumn ms_aDemoCols[NUM_DEMO_COLS];
- CBrowserFilter* GetSelectedBrowserFilter()
+ CBrowserFilter *GetSelectedBrowserFilter()
{
const int Tab = ServerBrowser()->GetType();
- if(m_aSelectedFilters[Tab] == -1)
+ if(m_aSelectedFilters[Tab] < 0 || m_aSelectedFilters[Tab] >= m_lFilters.size())
return 0;
return &m_lFilters[m_aSelectedFilters[Tab]];
}
- const CServerInfo* GetSelectedServerInfo()
+ const CServerInfo *GetSelectedServerInfo()
{
- CBrowserFilter* pSelectedFilter = GetSelectedBrowserFilter();
+ CBrowserFilter *pSelectedFilter = GetSelectedBrowserFilter();
if(!pSelectedFilter)
return 0;
const int Tab = ServerBrowser()->GetType();
diff --git a/src/game/client/components/menus_browser.cpp b/src/game/client/components/menus_browser.cpp
index b29efd306..976494b52 100644
--- a/src/game/client/components/menus_browser.cpp
+++ b/src/game/client/components/menus_browser.cpp
@@ -408,7 +408,12 @@ void CMenus::InitDefaultFilters()
m_lFilters.add(CBrowserFilter(CBrowserFilter::FILTER_ALL, Localize("All"), ServerBrowser()));
// expand the all filter tab by default
if(UseDefaultFilters)
- m_lFilters[m_lFilters.size()-1].Switch();
+ {
+ const int AllFilterIndex = m_lFilters.size()-1;
+ for(unsigned i = 0; i < IServerBrowser::NUM_TYPES; ++i)
+ m_aSelectedFilters[i] = AllFilterIndex; // default to "all" if not set
+ m_lFilters[AllFilterIndex].Switch();
+ }
}
// 1 = browser entry click, 2 = server info click