sd/source/ui/view/drviews1.cxx |   45 ++++++++++++++---------------------------
 1 file changed, 16 insertions(+), 29 deletions(-)

New commits:
commit ae4c4d5db85e2a61cbef1dc045c6c2614ad36dfc
Author:     Justin Luth <justin.l...@collabora.com>
AuthorDate: Fri Apr 4 09:48:24 2025 -0400
Commit:     Justin Luth <jl...@mail.com>
CommitDate: Tue Apr 8 13:48:59 2025 +0200

    LOK fix nullptr dereference in DrawViewShell::SelectPage
    
    Introduced with commit ebdb73c17d884c463c3c1279678a36c2668fd8c2
    Date:   Tue May 26 10:17:40 2020 +0530
        LOK: slide sorter: update the model on selecting multiple slides
    around the time of LO 7.0
    
    There were no steps to reproduce given.
    This is a blind fix based on a code read and a stack trace.
    
    sd::slidesorter::SlideSorterViewShell::GetSlideSorter (this=0x0)
    at sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx:291
    
    [I also took the opportunity to flatten the simply code
    (otherwise it would have ended up awkward
    with clang-format compliant formatting).]
    
    Change-Id: I78a703f51287d52cbcbae7d87ae4b455379becbd
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183717
    Tested-by: Jenkins
    Reviewed-by: Pranam Lashkari <lpra...@collabora.com>
    Reviewed-by: Justin Luth <jl...@mail.com>

diff --git a/sd/source/ui/view/drviews1.cxx b/sd/source/ui/view/drviews1.cxx
index 66410a7db385..e77211fc3496 100644
--- a/sd/source/ui/view/drviews1.cxx
+++ b/sd/source/ui/view/drviews1.cxx
@@ -766,40 +766,27 @@ bool DrawViewShell::ActivateObject(SdrOle2Obj* pObj, 
sal_Int32 nVerb)
 bool DrawViewShell::SelectPage(sal_uInt16 nPage, sal_uInt16 nSelect)
 {
     SdPage* pPage = GetDoc()->GetSdPage(nPage, PageKind::Standard);
+    if (!pPage)
+        return false;
 
-    //page selector marks pages to selected in view
-    auto &pageSelector = 
sd::slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase())->GetSlideSorter().GetController().GetPageSelector();
+    //page selector marks pages as selected in view
+    sd::slidesorter::SlideSorterViewShell* pSlideSorterVS
+        = 
sd::slidesorter::SlideSorterViewShell::GetSlideSorter(GetViewShellBase());
 
-    if (pPage)
+    if (nSelect == 1 || (/*Toggle*/ nSelect > 1 && !pPage->IsSelected()))
     {
-        if (nSelect == 0)
-        {
-            GetDoc()->SetSelected(pPage, false);  // Deselect.
-            pageSelector.DeselectPage(nPage);
-        }
-        else if (nSelect == 1)
-        {
-            GetDoc()->SetSelected(pPage, true);    // Select.
-            pageSelector.SelectPage(nPage);
-        }
-        else
-        {
-            // Toggle.
-            if (pPage->IsSelected())
-            {
-                GetDoc()->SetSelected(pPage, false);
-                pageSelector.DeselectPage(nPage);
-            }
-            else
-            {
-                GetDoc()->SetSelected(pPage, true);
-                pageSelector.SelectPage(nPage);
-            }
-        }
-        return true;
+        GetDoc()->SetSelected(pPage, true); // Select.
+        if (pSlideSorterVS)
+            
pSlideSorterVS->GetSlideSorter().GetController().GetPageSelector().SelectPage(nPage);
+    }
+    else
+    {
+        GetDoc()->SetSelected(pPage, false); // Deselect.
+        if (pSlideSorterVS)
+            
pSlideSorterVS->GetSlideSorter().GetController().GetPageSelector().DeselectPage(nPage);
     }
 
-    return false;
+    return true;
 }
 
 bool DrawViewShell::IsSelected(sal_uInt16 nPage)

Reply via email to