Fix crash when no valid EntryDescriptor found

When opening macro run dlg, the last selected entry is displayed again.
When no entry was found, a crash occured in some situations
(GetLastEntryDescriptor() returned garbage).

Initialize m_aLastEntryDesc properly, and make sure the method returns
when no last selected macro was found.

Also fix some nullptr crashes which occurred during UITests

Change-Id: I7bd1a0b8824725f9935876ae26d8222410a3bc25
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136140
Tested-by: Jenkins
Reviewed-by: Samuel Mehrbrodt <samuel.mehrbrodt@allotropia.de>
diff --git a/basctl/source/basicide/iderdll.cxx b/basctl/source/basicide/iderdll.cxx
index 0220450..8e8a3dc 100644
--- a/basctl/source/basicide/iderdll.cxx
+++ b/basctl/source/basicide/iderdll.cxx
@@ -145,6 +145,7 @@ ExtraData* Dll::GetExtraData ()


ExtraData::ExtraData () :
    m_aLastEntryDesc(EntryDescriptor()),
    bChoosingMacro(false),
    bShellInCriticalSection(false)
{
diff --git a/basctl/source/basicide/macrodlg.cxx b/basctl/source/basicide/macrodlg.cxx
index dbeaf39..03613c9 100644
--- a/basctl/source/basicide/macrodlg.cxx
+++ b/basctl/source/basicide/macrodlg.cxx
@@ -153,6 +153,13 @@ void MacroChooser::RestoreMacroDescription()
            aDesc = pData->GetLastEntryDescriptor();
    }

    // No valid EntryDescriptor found
    if (aDesc.GetMethodName().isEmpty())
    {
        m_xMacroNameEdit->select_region(0, 0);
        return;
    }

    m_xBasicBox->SetCurrentEntry(aDesc);
    BasicSelectHdl(m_xBasicBox->get_widget());

diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index f548fe1..b6db52c 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -4765,6 +4765,8 @@ void SalInstanceTreeView::set_text(const weld::TreeIter& rIter, const OUString& 
OUString SalInstanceTreeView::get_id(const weld::TreeIter& rIter) const
{
    const SalInstanceTreeIter& rVclIter = static_cast<const SalInstanceTreeIter&>(rIter);
    if (!rVclIter.iter)
        return OUString();
    const OUString* pStr = static_cast<const OUString*>(rVclIter.iter->GetUserData());
    if (pStr)
        return *pStr;
diff --git a/vcl/source/treelist/treelist.cxx b/vcl/source/treelist/treelist.cxx
index 8f51e34..fc81fa2 100644
--- a/vcl/source/treelist/treelist.cxx
+++ b/vcl/source/treelist/treelist.cxx
@@ -102,6 +102,8 @@ bool SvTreeList::IsEntryVisible( const SvListView* pView, SvTreeListEntry* pEntr

sal_uInt16 SvTreeList::GetDepth( const SvTreeListEntry* pEntry ) const
{
    if (!pEntry)
        return 0;
    DBG_ASSERT(pEntry && pEntry!=pRootItem.get(),"GetDepth:Bad Entry");
    sal_uInt16 nDepth = 0;
    while( pEntry && pEntry->pParent != pRootItem.get() )
@@ -1502,6 +1504,8 @@ SvTreeListEntries& SvTreeList::GetChildList( SvTreeListEntry* pParent )

const SvTreeListEntry* SvTreeList::GetParent( const SvTreeListEntry* pEntry ) const
{
    if (!pEntry)
        return nullptr;
    const SvTreeListEntry* pParent = pEntry->pParent;
    if (pParent == pRootItem.get())
        pParent = nullptr;
@@ -1510,6 +1514,8 @@ const SvTreeListEntry* SvTreeList::GetParent( const SvTreeListEntry* pEntry ) co

SvTreeListEntry* SvTreeList::GetParent( SvTreeListEntry* pEntry )
{
    if (!pEntry)
        return nullptr;
    SvTreeListEntry* pParent = pEntry->pParent;
    if (pParent == pRootItem.get())
        pParent = nullptr;