diff options
author | oy <tom_adams@web.de> | 2021-12-10 14:27:50 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-10 14:27:50 +0100 |
commit | d3f390821bb9fea1c7998b76ce1025e280eb0f3a (patch) | |
tree | e5c8763e77ff00182dbcd64f1455b7d616455feb | |
parent | e3b05383bcd2de769d68fcc04e8e13370daa6a66 (diff) | |
parent | f3b78546960d9b3899978e7d0ce2fee821e5dfe9 (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.h | 8 | ||||
-rw-r--r-- | src/game/client/components/menus_browser.cpp | 7 |
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 |