sc/source/ui/inc/dbfunc.hxx    |    2 
 sc/source/ui/undo/undodat.cxx  |    8 
 sc/source/ui/view/cellsh2.cxx  |  376 ++++++++++++++++++++---------------------
 sc/source/ui/view/dbfunc.cxx   |    5 
 sc/source/ui/view/tabvwshc.cxx |   65 +++----
 5 files changed, 235 insertions(+), 221 deletions(-)

New commits:
commit 63d700dbdf8d36789f5ad819a2ba6d2a4570b070
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Aug 14 12:31:28 2025 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Mon Aug 25 20:05:33 2025 +0200

    crashreporting: sc: check GetDBData()
    
    it might return nullptr
    
    Seen in 
https://crashreport.libreoffice.org/stats/crash_details/9b83d1cc-1964-4e9d-a7b5-2f0ab4702303
    
    Change-Id: Ie4b538697842560f821d78c5fe5e135a517beb82
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189586
    Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org>
    Tested-by: Jenkins
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>

diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index b17d37790b9e..5e79e0820c36 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -674,17 +674,18 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
 
         case SID_UNFILTER:
             {
-                ScQueryParam aParam;
                 // tdf#117346 - show current data range of the filter with 
selection
-                ScDBData* pDBData = pTabViewShell->GetDBData(true, SC_DB_OLD);
-
-                pDBData->GetQueryParam( aParam );
-                SCSIZE nEC = aParam.GetEntryCount();
-                for (SCSIZE i=0; i<nEC; i++)
-                    aParam.GetEntry(i).bDoQuery = false;
-                aParam.bDuplicate = true;
-                pTabViewShell->Query( aParam, nullptr, true );
-                rReq.Done();
+                if (ScDBData* pDBData = pTabViewShell->GetDBData(true, 
SC_DB_OLD))
+                {
+                    ScQueryParam aParam;
+                    pDBData->GetQueryParam( aParam );
+                    SCSIZE nEC = aParam.GetEntryCount();
+                    for (SCSIZE i=0; i<nEC; i++)
+                        aParam.GetEntry(i).bDoQuery = false;
+                    aParam.bDuplicate = true;
+                    pTabViewShell->Query( aParam, nullptr, true );
+                    rReq.Done();
+                }
             }
             break;
 
commit e7644224f9a4ca3b24346c5967d4c82ebbbf814c
Author:     Xisco Fauli <xiscofa...@libreoffice.org>
AuthorDate: Thu Aug 14 12:46:37 2025 +0200
Commit:     Xisco Fauli <xiscofa...@libreoffice.org>
CommitDate: Mon Aug 25 20:05:22 2025 +0200

    sc: use SAL_RET_MAYBENULL in GetDBData()
    
    Change-Id: Iaccf557056877128b4ba036ff43056816795874d
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189587
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Tested-by: Jenkins
    (cherry picked from commit 8ffeca7af4302da21d33494342017c3737d540e1)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/189734
    Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakan...@libreoffice.org>

diff --git a/sc/source/ui/inc/dbfunc.hxx b/sc/source/ui/inc/dbfunc.hxx
index a30f39747f30..0a9463e87e15 100644
--- a/sc/source/ui/inc/dbfunc.hxx
+++ b/sc/source/ui/inc/dbfunc.hxx
@@ -67,7 +67,7 @@ public:
     void GotoDBArea( const OUString& rDBName );
 
                     // DB range from Cursor
-    ScDBData*       GetDBData( bool bMarkArea = true, ScGetDBMode eMode = 
SC_DB_MAKE, ScGetDBSelection eSel = ScGetDBSelection::Keep);
+    SAL_RET_MAYBENULL ScDBData*       GetDBData( bool bMarkArea = true, 
ScGetDBMode eMode = SC_DB_MAKE, ScGetDBSelection eSel = ScGetDBSelection::Keep);
     ScDBData*       GetAnonymousDBData();
 
     void            Consolidate( const ScConsolidateParam& rParam );
diff --git a/sc/source/ui/undo/undodat.cxx b/sc/source/ui/undo/undodat.cxx
index 7820d60da6a1..8b9ff7a4a814 100644
--- a/sc/source/ui/undo/undodat.cxx
+++ b/sc/source/ui/undo/undodat.cxx
@@ -1266,10 +1266,12 @@ void ScUndoImportData::Repeat(SfxRepeatTarget& rTarget)
     {
         ScTabViewShell& rViewShell = pViewTarget->GetViewShell();
 
-        SCTAB nDummy;
         ScImportParam aNewParam(aImportParam);
-        ScDBData* pDBData = rViewShell.GetDBData();
-        pDBData->GetArea( nDummy, aNewParam.nCol1,aNewParam.nRow1, 
aNewParam.nCol2,aNewParam.nRow2 );
+        if (ScDBData* pDBData = rViewShell.GetDBData())
+        {
+            SCTAB nDummy;
+            pDBData->GetArea( nDummy, aNewParam.nCol1,aNewParam.nRow1, 
aNewParam.nCol2,aNewParam.nRow2 );
+        }
 
         rViewShell.ImportData( aNewParam );
     }
diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx
index a8e494abeeae..b17d37790b9e 100644
--- a/sc/source/ui/view/cellsh2.cxx
+++ b/sc/source/ui/view/cellsh2.cxx
@@ -384,216 +384,219 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
         case SID_SORT_DESCENDING:
         case SID_SORT_ASCENDING:
             {
-                //#i60401 ux-ctest: Calc does not support all users' 
strategies regarding sorting data
-                //the patch comes from maoyg
-                ScSortParam aSortParam;
-                ScDBData*   pDBData = pTabViewShell->GetDBData();
-                ScViewData& rData   = GetViewData();
-
-                pDBData->GetSortParam( aSortParam );
-
-                if( lcl_GetSortParam( rData, aSortParam ) )
+                if (ScDBData* pDBData = pTabViewShell->GetDBData())
                 {
-                    SCCOL nCol  = GetViewData().GetCurX();
-                    SCCOL nTab  = GetViewData().GetTabNo();
-                    ScDocument& rDoc = GetViewData().GetDocument();
+                    //#i60401 ux-ctest: Calc does not support all users' 
strategies regarding sorting data
+                    //the patch comes from maoyg
+                    ScSortParam aSortParam;
+                    ScViewData& rData   = GetViewData();
 
                     pDBData->GetSortParam( aSortParam );
-                    bool bHasHeader = rDoc.HasColHeader( aSortParam.nCol1, 
aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab );
-
-                    if( nCol < aSortParam.nCol1 )
-                        nCol = aSortParam.nCol1;
-                    else if( nCol > aSortParam.nCol2 )
-                        nCol = aSortParam.nCol2;
-
-                    aSortParam.bHasHeader       = bHasHeader;
-                    aSortParam.bByRow           = true;
-                    aSortParam.bCaseSens        = false;
-                    aSortParam.bNaturalSort     = false;
-                    aSortParam.aDataAreaExtras.mbCellNotes = false;
-                    aSortParam.aDataAreaExtras.mbCellDrawObjects = true;
-                    aSortParam.aDataAreaExtras.mbCellFormats = true;
-                    aSortParam.bInplace         = true;
-                    aSortParam.maKeyState[0].bDoSort = true;
-                    aSortParam.maKeyState[0].nField = nCol;
-                    aSortParam.maKeyState[0].bAscending = ( nSlotId == 
SID_SORT_ASCENDING );
-
-                    for ( sal_uInt16 i=1; i<aSortParam.GetSortKeyCount(); i++ )
-                        aSortParam.maKeyState[i].bDoSort = false;
-
-                    pTabViewShell->UISort( aSortParam );        // subtotal 
when needed new
 
-                    rReq.Done();
+                    if( lcl_GetSortParam( rData, aSortParam ) )
+                    {
+                        SCCOL nCol  = GetViewData().GetCurX();
+                        SCCOL nTab  = GetViewData().GetTabNo();
+                        ScDocument& rDoc = GetViewData().GetDocument();
+
+                        pDBData->GetSortParam( aSortParam );
+                        bool bHasHeader = rDoc.HasColHeader( aSortParam.nCol1, 
aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, nTab );
+
+                        if( nCol < aSortParam.nCol1 )
+                            nCol = aSortParam.nCol1;
+                        else if( nCol > aSortParam.nCol2 )
+                            nCol = aSortParam.nCol2;
+
+                        aSortParam.bHasHeader       = bHasHeader;
+                        aSortParam.bByRow           = true;
+                        aSortParam.bCaseSens        = false;
+                        aSortParam.bNaturalSort     = false;
+                        aSortParam.aDataAreaExtras.mbCellNotes = false;
+                        aSortParam.aDataAreaExtras.mbCellDrawObjects = true;
+                        aSortParam.aDataAreaExtras.mbCellFormats = true;
+                        aSortParam.bInplace         = true;
+                        aSortParam.maKeyState[0].bDoSort = true;
+                        aSortParam.maKeyState[0].nField = nCol;
+                        aSortParam.maKeyState[0].bAscending = ( nSlotId == 
SID_SORT_ASCENDING );
+
+                        for ( sal_uInt16 i=1; i<aSortParam.GetSortKeyCount(); 
i++ )
+                            aSortParam.maKeyState[i].bDoSort = false;
+
+                        pTabViewShell->UISort( aSortParam );        // 
subtotal when needed new
+
+                        rReq.Done();
+                    }
                 }
             }
             break;
 
         case SID_SORT:
             {
-                const SfxItemSet* pArgs = rReq.GetArgs();
-
-                //#i60401 ux-ctest: Calc does not support all users' 
strategies regarding sorting data
-                //the patch comes from maoyg
-
-                if ( pArgs )        // Basic
+                if (ScDBData* pDBData = pTabViewShell->GetDBData())
                 {
-                    ScSortParam aSortParam;
-                    ScDBData*   pDBData = pTabViewShell->GetDBData();
-                    ScViewData& rData   = GetViewData();
+                    const SfxItemSet* pArgs = rReq.GetArgs();
 
-                    pDBData->GetSortParam( aSortParam );
+                    //#i60401 ux-ctest: Calc does not support all users' 
strategies regarding sorting data
+                    //the patch comes from maoyg
 
-                    if( lcl_GetSortParam( rData, aSortParam ) )
+                    if ( pArgs )        // Basic
                     {
-                        ScDocument& rDoc = GetViewData().GetDocument();
+                        ScSortParam aSortParam;
+                        ScViewData& rData   = GetViewData();
 
                         pDBData->GetSortParam( aSortParam );
-                        bool bHasHeader = rDoc.HasColHeader( aSortParam.nCol1, 
aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, rData.GetTabNo() );
-                        if( bHasHeader )
-                            aSortParam.bHasHeader = bHasHeader;
-
-                        aSortParam.bInplace = true;             // from Basic 
always
-
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_BYROW ) )
-                            aSortParam.bByRow = pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_HASHEADER ) )
-                            aSortParam.bHasHeader = pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_CASESENS ) )
-                            aSortParam.bCaseSens = pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_NATURALSORT ) )
-                            aSortParam.bNaturalSort = pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_INCCOMMENTS ) )
-                            aSortParam.aDataAreaExtras.mbCellNotes = 
pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_INCIMAGES ) )
-                            aSortParam.aDataAreaExtras.mbCellDrawObjects = 
pItem->GetValue();
-                        if ( const SfxBoolItem* pItem = pArgs->GetItemIfSet( 
SID_SORT_ATTRIBS ) )
-                            aSortParam.aDataAreaExtras.mbCellFormats = 
pItem->GetValue();
-                        if ( const SfxUInt16Item* pItem = pArgs->GetItemIfSet( 
SID_SORT_USERDEF ) )
+
+                        if( lcl_GetSortParam( rData, aSortParam ) )
                         {
-                            sal_uInt16 nUserIndex = pItem->GetValue();
-                            aSortParam.bUserDef = ( nUserIndex != 0 );
-                            if ( nUserIndex )
-                                aSortParam.nUserIndex = nUserIndex - 1;     // 
Basic: 1-based
-                        }
+                            ScDocument& rDoc = GetViewData().GetDocument();
+
+                            pDBData->GetSortParam( aSortParam );
+                            bool bHasHeader = rDoc.HasColHeader( 
aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, 
rData.GetTabNo() );
+                            if( bHasHeader )
+                                aSortParam.bHasHeader = bHasHeader;
+
+                            aSortParam.bInplace = true;             // from 
Basic always
+
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_BYROW ) )
+                                aSortParam.bByRow = pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_HASHEADER ) )
+                                aSortParam.bHasHeader = pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_CASESENS ) )
+                                aSortParam.bCaseSens = pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_NATURALSORT ) )
+                                aSortParam.bNaturalSort = pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_INCCOMMENTS ) )
+                                aSortParam.aDataAreaExtras.mbCellNotes = 
pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_INCIMAGES ) )
+                                aSortParam.aDataAreaExtras.mbCellDrawObjects = 
pItem->GetValue();
+                            if ( const SfxBoolItem* pItem = 
pArgs->GetItemIfSet( SID_SORT_ATTRIBS ) )
+                                aSortParam.aDataAreaExtras.mbCellFormats = 
pItem->GetValue();
+                            if ( const SfxUInt16Item* pItem = 
pArgs->GetItemIfSet( SID_SORT_USERDEF ) )
+                            {
+                                sal_uInt16 nUserIndex = pItem->GetValue();
+                                aSortParam.bUserDef = ( nUserIndex != 0 );
+                                if ( nUserIndex )
+                                    aSortParam.nUserIndex = nUserIndex - 1;    
 // Basic: 1-based
+                            }
 
-                        SCCOLROW nField0 = 0;
-                        const SfxPoolItem* pItem = nullptr;
-                        if ( pArgs->GetItemState( FN_PARAM_1, true, &pItem ) 
== SfxItemState::SET )
-                            nField0 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
-                        aSortParam.maKeyState[0].bDoSort = ( nField0 != 0 );
-                        aSortParam.maKeyState[0].nField = nField0 > 0 ? 
(nField0-1) : 0;
-                        if ( pArgs->GetItemState( FN_PARAM_2, true, &pItem ) 
== SfxItemState::SET )
-                            aSortParam.maKeyState[0].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
-                        SCCOLROW nField1 = 0;
-                        if ( pArgs->GetItemState( FN_PARAM_3, true, &pItem ) 
== SfxItemState::SET )
-                            nField1 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
-                        aSortParam.maKeyState[1].bDoSort = ( nField1 != 0 );
-                        aSortParam.maKeyState[1].nField = nField1 > 0 ? 
(nField1-1) : 0;
-                        if ( pArgs->GetItemState( FN_PARAM_4, true, &pItem ) 
== SfxItemState::SET )
-                            aSortParam.maKeyState[1].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
-                        SCCOLROW nField2 = 0;
-                        if ( pArgs->GetItemState( FN_PARAM_5, true, &pItem ) 
== SfxItemState::SET )
-                            nField2 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
-                        aSortParam.maKeyState[2].bDoSort = ( nField2 != 0 );
-                        aSortParam.maKeyState[2].nField = nField2 > 0 ? 
(nField2-1) : 0;
-                        if ( pArgs->GetItemState( FN_PARAM_6, true, &pItem ) 
== SfxItemState::SET )
-                            aSortParam.maKeyState[2].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
-
-                        // subtotal when needed new
-                        pTabViewShell->UISort( aSortParam );
-                        rReq.Done();
+                            SCCOLROW nField0 = 0;
+                            const SfxPoolItem* pItem = nullptr;
+                            if ( pArgs->GetItemState( FN_PARAM_1, true, &pItem 
) == SfxItemState::SET )
+                                nField0 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
+                            aSortParam.maKeyState[0].bDoSort = ( nField0 != 0 
);
+                            aSortParam.maKeyState[0].nField = nField0 > 0 ? 
(nField0-1) : 0;
+                            if ( pArgs->GetItemState( FN_PARAM_2, true, &pItem 
) == SfxItemState::SET )
+                                aSortParam.maKeyState[0].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
+                            SCCOLROW nField1 = 0;
+                            if ( pArgs->GetItemState( FN_PARAM_3, true, &pItem 
) == SfxItemState::SET )
+                                nField1 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
+                            aSortParam.maKeyState[1].bDoSort = ( nField1 != 0 
);
+                            aSortParam.maKeyState[1].nField = nField1 > 0 ? 
(nField1-1) : 0;
+                            if ( pArgs->GetItemState( FN_PARAM_4, true, &pItem 
) == SfxItemState::SET )
+                                aSortParam.maKeyState[1].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
+                            SCCOLROW nField2 = 0;
+                            if ( pArgs->GetItemState( FN_PARAM_5, true, &pItem 
) == SfxItemState::SET )
+                                nField2 = static_cast<const 
SfxInt32Item*>(pItem)->GetValue();
+                            aSortParam.maKeyState[2].bDoSort = ( nField2 != 0 
);
+                            aSortParam.maKeyState[2].nField = nField2 > 0 ? 
(nField2-1) : 0;
+                            if ( pArgs->GetItemState( FN_PARAM_6, true, &pItem 
) == SfxItemState::SET )
+                                aSortParam.maKeyState[2].bAscending = 
static_cast<const SfxBoolItem*>(pItem)->GetValue();
+
+                            // subtotal when needed new
+                            pTabViewShell->UISort( aSortParam );
+                            rReq.Done();
+                        }
                     }
-                }
-                else
-                {
-                    ScSortParam aSortParam;
-                    ScDBData*   pDBData = pTabViewShell->GetDBData();
-                    ScViewData& rData   = GetViewData();
-
-                    pDBData->GetSortParam( aSortParam );
-
-                    if( lcl_GetSortParam( rData, aSortParam ) )
+                    else
                     {
-                        ScDocument& rDoc = GetViewData().GetDocument();
-                        SfxItemSetFixed<SCITEM_SORTDATA, SCITEM_SORTDATA>  
aArgSet( GetPool() );
+                        ScSortParam aSortParam;
+                        ScViewData& rData   = GetViewData();
 
                         pDBData->GetSortParam( aSortParam );
-                        bool bHasHeader = rDoc.HasColHeader( aSortParam.nCol1, 
aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, rData.GetTabNo() );
-                        if( bHasHeader )
-                            aSortParam.bHasHeader = bHasHeader;
 
-                        aArgSet.Put( ScSortItem( SCITEM_SORTDATA, 
&GetViewData(), &aSortParam ) );
+                        if( lcl_GetSortParam( rData, aSortParam ) )
+                        {
+                            ScDocument& rDoc = GetViewData().GetDocument();
+                            SfxItemSetFixed<SCITEM_SORTDATA, SCITEM_SORTDATA>  
aArgSet( GetPool() );
+
+                            pDBData->GetSortParam( aSortParam );
+                            bool bHasHeader = rDoc.HasColHeader( 
aSortParam.nCol1, aSortParam.nRow1, aSortParam.nCol2, aSortParam.nRow2, 
rData.GetTabNo() );
+                            if( bHasHeader )
+                                aSortParam.bHasHeader = bHasHeader;
 
-                        ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
-                        std::shared_ptr<ScAsyncTabController> 
pDlg(pFact->CreateScSortDlg(pTabViewShell->GetFrameWeld(),  &aArgSet));
-                        pDlg->SetCurPageId(u"criteria"_ustr);  // 1=sort field 
tab  2=sort options tab
+                            aArgSet.Put( ScSortItem( SCITEM_SORTDATA, 
&GetViewData(), &aSortParam ) );
 
-                        VclAbstractDialog::AsyncContext aContext;
-                        aContext.maEndDialogFn = [pDlg, &rData, 
pTabViewShell](sal_Int32 nResult)
-                            {
-                                if ( nResult == RET_OK )
+                            ScAbstractDialogFactory* pFact = 
ScAbstractDialogFactory::Create();
+                            std::shared_ptr<ScAsyncTabController> 
pDlg(pFact->CreateScSortDlg(pTabViewShell->GetFrameWeld(),  &aArgSet));
+                            pDlg->SetCurPageId(u"criteria"_ustr);  // 1=sort 
field tab  2=sort options tab
+
+                            VclAbstractDialog::AsyncContext aContext;
+                            aContext.maEndDialogFn = [pDlg, &rData, 
pTabViewShell](sal_Int32 nResult)
                                 {
-                                    const SfxItemSet* pOutSet = 
pDlg->GetOutputItemSet();
-                                    const ScSortParam& rOutParam =
-                                        pOutSet->Get( SCITEM_SORTDATA 
).GetSortData();
+                                    if ( nResult == RET_OK )
+                                    {
+                                        const SfxItemSet* pOutSet = 
pDlg->GetOutputItemSet();
+                                        const ScSortParam& rOutParam =
+                                            pOutSet->Get( SCITEM_SORTDATA 
).GetSortData();
 
-                                    // subtotal when needed new
+                                        // subtotal when needed new
 
-                                    pTabViewShell->UISort( rOutParam );
+                                        pTabViewShell->UISort( rOutParam );
 
-                                    SfxViewFrame& rViewFrm = 
pTabViewShell->GetViewFrame();
-                                    SfxRequest aRequest(rViewFrm, SID_SORT);
+                                        SfxViewFrame& rViewFrm = 
pTabViewShell->GetViewFrame();
+                                        SfxRequest aRequest(rViewFrm, 
SID_SORT);
 
-                                    if ( rOutParam.bInplace )
-                                    {
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_BYROW,
-                                            rOutParam.bByRow ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_HASHEADER,
-                                            rOutParam.bHasHeader ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_CASESENS,
-                                            rOutParam.bCaseSens ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_NATURALSORT,
-                                                    rOutParam.bNaturalSort ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_INCCOMMENTS,
-                                                    
rOutParam.aDataAreaExtras.mbCellNotes ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_INCIMAGES,
-                                                    
rOutParam.aDataAreaExtras.mbCellDrawObjects ) );
-                                        aRequest.AppendItem( SfxBoolItem( 
SID_SORT_ATTRIBS,
-                                                    
rOutParam.aDataAreaExtras.mbCellFormats ) );
-                                        sal_uInt16 nUser = rOutParam.bUserDef 
? ( rOutParam.nUserIndex + 1 ) : 0;
-                                        aRequest.AppendItem( SfxUInt16Item( 
SID_SORT_USERDEF, nUser ) );
-                                        if ( rOutParam.maKeyState[0].bDoSort )
-                                        {
-                                            aRequest.AppendItem( SfxInt32Item( 
TypedWhichId<SfxInt32Item>(FN_PARAM_1),
-                                                rOutParam.maKeyState[0].nField 
+ 1 ) );
-                                            aRequest.AppendItem( SfxBoolItem( 
FN_PARAM_2,
-                                                
rOutParam.maKeyState[0].bAscending ) );
-                                        }
-                                        if ( rOutParam.maKeyState[1].bDoSort )
+                                        if ( rOutParam.bInplace )
                                         {
-                                            aRequest.AppendItem( SfxInt32Item( 
TypedWhichId<SfxInt32Item>(FN_PARAM_3),
-                                                rOutParam.maKeyState[1].nField 
+ 1 ) );
-                                            aRequest.AppendItem( SfxBoolItem( 
FN_PARAM_4,
-                                                
rOutParam.maKeyState[1].bAscending ) );
-                                        }
-                                        if ( rOutParam.maKeyState[2].bDoSort )
-                                        {
-                                            aRequest.AppendItem( SfxInt32Item( 
TypedWhichId<SfxInt32Item>(FN_PARAM_5),
-                                                rOutParam.maKeyState[2].nField 
+ 1 ) );
-                                            aRequest.AppendItem( SfxBoolItem( 
FN_PARAM_6,
-                                                
rOutParam.maKeyState[2].bAscending ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_BYROW,
+                                                rOutParam.bByRow ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_HASHEADER,
+                                                rOutParam.bHasHeader ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_CASESENS,
+                                                rOutParam.bCaseSens ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_NATURALSORT,
+                                                        rOutParam.bNaturalSort 
) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_INCCOMMENTS,
+                                                        
rOutParam.aDataAreaExtras.mbCellNotes ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_INCIMAGES,
+                                                        
rOutParam.aDataAreaExtras.mbCellDrawObjects ) );
+                                            aRequest.AppendItem( SfxBoolItem( 
SID_SORT_ATTRIBS,
+                                                        
rOutParam.aDataAreaExtras.mbCellFormats ) );
+                                            sal_uInt16 nUser = 
rOutParam.bUserDef ? ( rOutParam.nUserIndex + 1 ) : 0;
+                                            aRequest.AppendItem( 
SfxUInt16Item( SID_SORT_USERDEF, nUser ) );
+                                            if ( 
rOutParam.maKeyState[0].bDoSort )
+                                            {
+                                                aRequest.AppendItem( 
SfxInt32Item( TypedWhichId<SfxInt32Item>(FN_PARAM_1),
+                                                    
rOutParam.maKeyState[0].nField + 1 ) );
+                                                aRequest.AppendItem( 
SfxBoolItem( FN_PARAM_2,
+                                                    
rOutParam.maKeyState[0].bAscending ) );
+                                            }
+                                            if ( 
rOutParam.maKeyState[1].bDoSort )
+                                            {
+                                                aRequest.AppendItem( 
SfxInt32Item( TypedWhichId<SfxInt32Item>(FN_PARAM_3),
+                                                    
rOutParam.maKeyState[1].nField + 1 ) );
+                                                aRequest.AppendItem( 
SfxBoolItem( FN_PARAM_4,
+                                                    
rOutParam.maKeyState[1].bAscending ) );
+                                            }
+                                            if ( 
rOutParam.maKeyState[2].bDoSort )
+                                            {
+                                                aRequest.AppendItem( 
SfxInt32Item( TypedWhichId<SfxInt32Item>(FN_PARAM_5),
+                                                    
rOutParam.maKeyState[2].nField + 1 ) );
+                                                aRequest.AppendItem( 
SfxBoolItem( FN_PARAM_6,
+                                                    
rOutParam.maKeyState[2].bAscending ) );
+                                            }
                                         }
-                                    }
 
-                                    aRequest.Done();
-                                }
-                                else
-                                {
-                                    rData.GetDocShell().CancelAutoDBRange();
-                                }
-                            };
+                                        aRequest.Done();
+                                    }
+                                    else
+                                    {
+                                        
rData.GetDocShell().CancelAutoDBRange();
+                                    }
+                                };
 
-                        pDlg->StartExecuteAsync(aContext);
+                            pDlg->StartExecuteAsync(aContext);
+                        }
                     }
                 }
             }
diff --git a/sc/source/ui/view/dbfunc.cxx b/sc/source/ui/view/dbfunc.cxx
index 8b0ade4fee01..ec13d170f7ef 100644
--- a/sc/source/ui/view/dbfunc.cxx
+++ b/sc/source/ui/view/dbfunc.cxx
@@ -282,6 +282,9 @@ void ScDBFunc::ToggleAutoFilter()
     ScDocument&     rDoc    = rViewData.GetDocument();
     ScDBData*       pDBData = GetDBData(false, SC_DB_AUTOFILTER, 
ScGetDBSelection::RowDown);
 
+    if (!pDBData)
+        return;
+
     pDBData->SetByRow( true );              //! undo, retrieve beforehand ??
     pDBData->GetQueryParam( aParam );
 
@@ -419,6 +422,8 @@ void ScDBFunc::HideAutoFilter()
     ScDocument& rDoc = rDocSh.GetDocument();
 
     ScDBData* pDBData = GetDBData( false );
+    if (!pDBData)
+        return;
 
     SCTAB nTab;
     SCCOL nCol1, nCol2;
diff --git a/sc/source/ui/view/tabvwshc.cxx b/sc/source/ui/view/tabvwshc.cxx
index 8aceaab2f36b..f63a670e22de 100644
--- a/sc/source/ui/view/tabvwshc.cxx
+++ b/sc/source/ui/view/tabvwshc.cxx
@@ -332,52 +332,55 @@ std::shared_ptr<SfxModelessDialogController> 
ScTabViewShell::CreateRefDialogCont
         }
         case SID_FILTER:
         {
+            if (ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown))
+            {
+                ScQueryParam    aQueryParam;
+                SfxItemSetFixed<SCITEM_QUERYDATA, SCITEM_QUERYDATA> aArgSet( 
GetPool() );
 
-            ScQueryParam    aQueryParam;
-            SfxItemSetFixed<SCITEM_QUERYDATA, SCITEM_QUERYDATA> aArgSet( 
GetPool() );
-
-            ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown);
-            pDBData->ExtendDataArea(rDoc);
-            pDBData->ExtendBackColorArea(rDoc);
-            pDBData->GetQueryParam( aQueryParam );
+                pDBData->ExtendDataArea(rDoc);
+                pDBData->ExtendBackColorArea(rDoc);
+                pDBData->GetQueryParam( aQueryParam );
 
-            ScRange aArea;
-            pDBData->GetArea(aArea);
-            MarkRange(aArea, false);
+                ScRange aArea;
+                pDBData->GetArea(aArea);
+                MarkRange(aArea, false);
 
-            aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &aQueryParam ) );
+                aArgSet.Put( ScQueryItem( SCITEM_QUERYDATA, &aQueryParam ) );
 
-            // mark current sheet (due to RefInput in dialog)
-            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
+                // mark current sheet (due to RefInput in dialog)
+                GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
 
-            xResult = std::make_shared<ScFilterDlg>(pB, pCW, pParent, 
GetViewData(), aArgSet);
+                xResult = std::make_shared<ScFilterDlg>(pB, pCW, pParent, 
GetViewData(), aArgSet);
+            }
             break;
         }
         case SID_SPECIAL_FILTER:
         {
-            ScQueryParam    aQueryParam;
-            SfxItemSetFixed<SCITEM_QUERYDATA,
-                                     SCITEM_QUERYDATA> aArgSet( GetPool() );
+            if (ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown))
+            {
+                ScQueryParam    aQueryParam;
+                SfxItemSetFixed<SCITEM_QUERYDATA,
+                                         SCITEM_QUERYDATA> aArgSet( GetPool() 
);
 
-            ScDBData* pDBData = GetDBData(false, SC_DB_MAKE, 
ScGetDBSelection::RowDown);
-            pDBData->ExtendDataArea(rDoc);
-            pDBData->GetQueryParam( aQueryParam );
+                pDBData->ExtendDataArea(rDoc);
+                pDBData->GetQueryParam( aQueryParam );
 
-            ScRange aArea;
-            pDBData->GetArea(aArea);
-            MarkRange(aArea, false);
+                ScRange aArea;
+                pDBData->GetArea(aArea);
+                MarkRange(aArea, false);
 
-            ScQueryItem aItem( SCITEM_QUERYDATA, &aQueryParam );
-            ScRange aAdvSource;
-            if (pDBData->GetAdvancedQuerySource(aAdvSource))
-                aItem.SetAdvancedQuerySource( &aAdvSource );
+                ScQueryItem aItem( SCITEM_QUERYDATA, &aQueryParam );
+                ScRange aAdvSource;
+                if (pDBData->GetAdvancedQuerySource(aAdvSource))
+                    aItem.SetAdvancedQuerySource( &aAdvSource );
 
-            aArgSet.Put( aItem );
+                aArgSet.Put( aItem );
 
-            // mark current sheet (due to RefInput in dialog)
-            GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
+                // mark current sheet (due to RefInput in dialog)
+                GetViewData().SetRefTabNo( GetViewData().GetTabNo() );
 
-            xResult = std::make_shared<ScSpecialFilterDlg>(pB, pCW, pParent, 
GetViewData(), aArgSet);
+                xResult = std::make_shared<ScSpecialFilterDlg>(pB, pCW, 
pParent, GetViewData(), aArgSet);
+            }
             break;
         }
         case SID_OPENDLG_OPTSOLVER:

Reply via email to