From fd7b2f5fbbee23fc2ab9722fcd605921b7184113 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= Date: Thu, 28 Nov 2019 09:50:36 +0000 Subject: [PATCH] rhbz#1775767 null deref Change-Id: I6941055f9a02b36b5fe621fe89f49f62beb87e67 --- include/sfx2/sidebar/Theme.hxx | 2 +- sfx2/source/sidebar/SidebarController.cxx | 9 +++-- sfx2/source/sidebar/Theme.cxx | 43 ++++++++++++----------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/include/sfx2/sidebar/Theme.hxx b/include/sfx2/sidebar/Theme.hxx index 16a4798..b7eaf88 100644 --- a/include/sfx2/sidebar/Theme.hxx +++ b/include/sfx2/sidebar/Theme.hxx @@ -175,7 +175,7 @@ public: virtual sal_Bool SAL_CALL hasPropertyByName (const OUString& rsName) override; private: - static Theme& GetCurrentTheme(); + static Theme* GetCurrentTheme(); std::vector maImages; std::vector maColors; diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx index 0cad779..764d4e3 100644 --- a/sfx2/source/sidebar/SidebarController.cxx +++ b/sfx2/source/sidebar/SidebarController.cxx @@ -258,9 +258,12 @@ void SAL_CALL SidebarController::disposing() mpParentWindow = nullptr; } - Theme::GetPropertySet()->removePropertyChangeListener( - "", - static_cast(this)); + Reference xPropertySet = Theme::GetPropertySet(); + if (xPropertySet) + { + xPropertySet->removePropertyChangeListener("", + static_cast(this)); + } maContextChangeUpdate.CancelRequest(); maAsynchronousDeckSwitch.CancelRequest(); diff --git a/sfx2/source/sidebar/Theme.cxx b/sfx2/source/sidebar/Theme.cxx index bc6236d..1ef350e 100644 --- a/sfx2/source/sidebar/Theme.cxx +++ b/sfx2/source/sidebar/Theme.cxx @@ -34,9 +34,10 @@ using namespace css::uno; namespace sfx2 { namespace sidebar { -Theme& Theme::GetCurrentTheme() +Theme* Theme::GetCurrentTheme() { - return SfxGetpApp()->GetSidebarTheme(); + SfxApplication* pApp = SfxGetpApp(); + return pApp ? &pApp->GetSidebarTheme() : nullptr; } Theme::Theme() @@ -67,8 +68,8 @@ Image Theme::GetImage (const ThemeItem eItem) const PropertyType eType (GetPropertyType(eItem)); OSL_ASSERT(eType==PT_Image); const sal_Int32 nIndex (GetIndex(eItem, eType)); - const Theme& rTheme (GetCurrentTheme()); - return rTheme.maImages[nIndex]; + const Theme* pTheme (GetCurrentTheme()); + return pTheme->maImages[nIndex]; } Color Theme::GetColor (const ThemeItem eItem) @@ -76,11 +77,11 @@ Color Theme::GetColor (const ThemeItem eItem) const PropertyType eType (GetPropertyType(eItem)); OSL_ASSERT(eType==PT_Color || eType==PT_Paint); const sal_Int32 nIndex (GetIndex(eItem, eType)); - const Theme& rTheme (GetCurrentTheme()); + const Theme* pTheme (GetCurrentTheme()); if (eType == PT_Color) - return rTheme.maColors[nIndex]; + return pTheme->maColors[nIndex]; else if (eType == PT_Paint) - return rTheme.maPaints[nIndex].GetColor(); + return pTheme->maPaints[nIndex].GetColor(); else return COL_WHITE; } @@ -90,8 +91,8 @@ const Paint& Theme::GetPaint (const ThemeItem eItem) const PropertyType eType (GetPropertyType(eItem)); OSL_ASSERT(eType==PT_Paint); const sal_Int32 nIndex (GetIndex(eItem, eType)); - const Theme& rTheme (GetCurrentTheme()); - return rTheme.maPaints[nIndex]; + const Theme* pTheme (GetCurrentTheme()); + return pTheme->maPaints[nIndex]; } const Wallpaper Theme::GetWallpaper (const ThemeItem eItem) @@ -104,8 +105,8 @@ sal_Int32 Theme::GetInteger (const ThemeItem eItem) const PropertyType eType (GetPropertyType(eItem)); OSL_ASSERT(eType==PT_Integer); const sal_Int32 nIndex (GetIndex(eItem, eType)); - const Theme& rTheme (GetCurrentTheme()); - return rTheme.maIntegers[nIndex]; + const Theme* pTheme (GetCurrentTheme()); + return pTheme->maIntegers[nIndex]; } bool Theme::GetBoolean (const ThemeItem eItem) @@ -113,28 +114,28 @@ bool Theme::GetBoolean (const ThemeItem eItem) const PropertyType eType (GetPropertyType(eItem)); OSL_ASSERT(eType==PT_Boolean); const sal_Int32 nIndex (GetIndex(eItem, eType)); - const Theme& rTheme (GetCurrentTheme()); - return rTheme.maBooleans[nIndex]; + const Theme* pTheme (GetCurrentTheme()); + return pTheme->maBooleans[nIndex]; } bool Theme::IsHighContrastMode() { - const Theme& rTheme (GetCurrentTheme()); - return rTheme.mbIsHighContrastMode; + const Theme* pTheme (GetCurrentTheme()); + return pTheme->mbIsHighContrastMode; } void Theme::HandleDataChange() { - Theme& rTheme (GetCurrentTheme()); + Theme* pTheme (GetCurrentTheme()); - if ( ! rTheme.mbIsHighContrastModeSetManually) + if (!pTheme->mbIsHighContrastModeSetManually) { // Do not modify mbIsHighContrastMode when it was manually set. - GetCurrentTheme().mbIsHighContrastMode = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); - rTheme.maRawValues[Bool_IsHighContrastModeActive] <<= GetCurrentTheme().mbIsHighContrastMode; + GetCurrentTheme()->mbIsHighContrastMode = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); + pTheme->maRawValues[Bool_IsHighContrastModeActive] <<= GetCurrentTheme()->mbIsHighContrastMode; } - GetCurrentTheme().UpdateTheme(); + GetCurrentTheme()->UpdateTheme(); } void Theme::InitializeTheme() @@ -369,7 +370,7 @@ void SAL_CALL Theme::disposing() Reference Theme::GetPropertySet() { - return Reference(static_cast(&GetCurrentTheme()), UNO_QUERY); + return Reference(static_cast(GetCurrentTheme()), UNO_QUERY); } Reference SAL_CALL Theme::getPropertySetInfo() -- 2.20.1