From b6ab5914d8b2fc7041430796890f086f8e3e6369 Mon Sep 17 00:00:00 2001 From: Mike Kaganski Date: Wed, 28 Apr 2021 12:37:19 +0200 Subject: tdf#135997: make sure that the two lists are same length This fixes the strange assumption that when searching the two lists (character names and font names) independently, the two found positions will necessarily correspond to each other. Instead, the positions of the match must be the same, which is implemented now. Also the input from configuration is sanitized. Change-Id: I920de7414387e181e11183b8a22776a72b6be419 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/114722 Tested-by: Jenkins Reviewed-by: Mike Kaganski --- sfx2/source/control/charmapcontrol.cxx | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'sfx2') diff --git a/sfx2/source/control/charmapcontrol.cxx b/sfx2/source/control/charmapcontrol.cxx index 5417f21bc1b6..b88defff73b9 100644 --- a/sfx2/source/control/charmapcontrol.cxx +++ b/sfx2/source/control/charmapcontrol.cxx @@ -125,10 +125,17 @@ void SfxCharmapCtrl::getFavCharacterList() //retrieve recent character font list css::uno::Sequence< OUString > rFavCharFontList( officecfg::Office::Common::FavoriteCharacters::FavoriteCharacterFontList::get() ); m_aFavCharFontList.insert( m_aFavCharFontList.end(), rFavCharFontList.begin(), rFavCharFontList.end() ); + + // tdf#135997: make sure that the two lists are same length + const auto nCommonLength = std::min(m_aFavCharList.size(), m_aFavCharFontList.size()); + m_aFavCharList.resize(nCommonLength); + m_aFavCharFontList.resize(nCommonLength); } void SfxCharmapCtrl::updateFavCharControl() { + assert(m_aFavCharList.size() == m_aFavCharFontList.size()); + int i = 0; for ( std::deque< OUString >::iterator it = m_aFavCharList.begin(), it2 = m_aFavCharFontList.begin(); it != m_aFavCharList.end() && it2 != m_aFavCharFontList.end(); @@ -157,10 +164,16 @@ void SfxCharmapCtrl::getRecentCharacterList() //retrieve recent character font list css::uno::Sequence< OUString > rRecentCharFontList( officecfg::Office::Common::RecentCharacters::RecentCharacterFontList::get() ); m_aRecentCharFontList.insert( m_aRecentCharFontList.end(), rRecentCharFontList.begin(), rRecentCharFontList.end() ); + + // tdf#135997: make sure that the two lists are same length + const auto nCommonLength = std::min(m_aRecentCharList.size(), m_aRecentCharFontList.size()); + m_aRecentCharList.resize(nCommonLength); + m_aRecentCharFontList.resize(nCommonLength); } void SfxCharmapCtrl::updateRecentCharControl() { + assert(m_aRecentCharList.size() == m_aRecentCharFontList.size()); int i = 0; for ( std::deque< OUString >::iterator it = m_aRecentCharList.begin(), it2 = m_aRecentCharFontList.begin(); it != m_aRecentCharList.end() && it2 != m_aRecentCharFontList.end(); -- cgit