chart2/source/controller/dialogs/ChartTypeDialogController.cxx |    5 ++-
 chart2/source/controller/dialogs/tp_ChartType.cxx              |   14 
++++++----
 chart2/source/tools/AxisHelper.cxx                             |    8 ++++-
 chart2/source/tools/ReferenceSizeProvider.cxx                  |    2 +
 4 files changed, 20 insertions(+), 9 deletions(-)

New commits:
commit 39848b5f802c539e5d630bb7905d3d9b8d966c26
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Thu May 11 11:30:46 2023 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Thu May 11 14:23:25 2023 +0200

    tdf#155231 CRASH: with embedded OLE chart
    
    regressions from commits like
        commit 70595c0291e4cc137158c77f6136025b10ce6728
        Author: Noel Grandin <noel.gran...@collabora.co.uk>
        Date:   Thu Mar 16 09:20:17 2023 +0200
        move setDimension/getDimension inside chart2::Diagram
    
    Change-Id: I535d8e74d621821bde7d31894fe7f0350e91c941
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/151664
    Reviewed-by: Xisco Fauli <xiscofa...@libreoffice.org>
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx 
b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
index 581e5e89cad6..b52dbc289743 100644
--- a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
+++ b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
@@ -315,8 +315,9 @@ void ChartTypeDialogController::commitToModel( const 
ChartTypeParameter& rParame
     // locked controllers
     ControllerLockGuardUNO aCtrlLockGuard( xChartModel );
     rtl::Reference< Diagram > xDiagram = xChartModel->getFirstChartDiagram();
-    Diagram::tTemplateWithServiceName aTemplateWithService(
-        xDiagram->getTemplate( xTemplateManager ));
+    Diagram::tTemplateWithServiceName aTemplateWithService;
+    if (xDiagram)
+        aTemplateWithService = xDiagram->getTemplate( xTemplateManager );
     if( aTemplateWithService.xChartTypeTemplate.is())
         aTemplateWithService.xChartTypeTemplate->resetStyles2( xDiagram );
     xTemplate->changeDiagram( xDiagram );
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx 
b/chart2/source/controller/dialogs/tp_ChartType.cxx
index 5c73ed11eda2..e0ddd62cd6ed 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -245,15 +245,18 @@ void ChartTypeTabPage::selectMainType()
     m_pCurrentMainType->adjustParameterToMainType( aParameter );
     commitToModel( aParameter );
     //detect the new ThreeDLookScheme
-    aParameter.eThreeDLookScheme = 
m_xChartModel->getFirstChartDiagram()->detectScheme();
+    aParameter.eThreeDLookScheme = ThreeDLookScheme::ThreeDLookScheme_Unknown;
+    rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram();
+    if (xDiagram)
+        aParameter.eThreeDLookScheme = 
m_xChartModel->getFirstChartDiagram()->detectScheme();
     if (!aParameter.b3DLook
         && aParameter.eThreeDLookScheme != 
ThreeDLookScheme::ThreeDLookScheme_Realistic)
         aParameter.eThreeDLookScheme = 
ThreeDLookScheme::ThreeDLookScheme_Realistic;
 
-    rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram();
     try
     {
-        xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+        if (xDiagram)
+            xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
     }
     catch ( const uno::Exception& )
     {
@@ -305,8 +308,9 @@ void ChartTypeTabPage::initializePage()
         return;
     rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = 
m_xChartModel->getTypeManager();
     rtl::Reference< Diagram > xDiagram = m_xChartModel->getFirstChartDiagram();
-    Diagram::tTemplateWithServiceName aTemplate =
-        xDiagram->getTemplate( xChartTypeManager );
+    Diagram::tTemplateWithServiceName aTemplate;
+    if (xDiagram)
+        aTemplate = xDiagram->getTemplate( xChartTypeManager );
     OUString aServiceName( aTemplate.sServiceName );
 
     bool bFound = false;
diff --git a/chart2/source/tools/AxisHelper.cxx 
b/chart2/source/tools/AxisHelper.cxx
index 7e8229352181..e8e90c5e429f 100644
--- a/chart2/source/tools/AxisHelper.cxx
+++ b/chart2/source/tools/AxisHelper.cxx
@@ -849,11 +849,15 @@ void AxisHelper::getAxisOrGridPossibilities( Sequence< 
sal_Bool >& rPossibilityL
     rPossibilityList.realloc(6);
     sal_Bool* pPossibilityList = rPossibilityList.getArray();
 
-    sal_Int32 nDimensionCount = xDiagram->getDimension();
+    sal_Int32 nDimensionCount = -1;
+    if (xDiagram)
+        nDimensionCount = xDiagram->getDimension();
 
     //set possibilities:
     sal_Int32 nIndex=0;
-    rtl::Reference< ChartType > xChartType = xDiagram->getChartTypeByIndex( 0 
);
+    rtl::Reference< ChartType > xChartType;
+    if (xDiagram)
+        xChartType = xDiagram->getChartTypeByIndex( 0 );
     for(nIndex=0;nIndex<3;nIndex++)
         
pPossibilityList[nIndex]=ChartTypeHelper::isSupportingMainAxis(xChartType,nDimensionCount,nIndex);
     for(nIndex=3;nIndex<6;nIndex++)
diff --git a/chart2/source/tools/ReferenceSizeProvider.cxx 
b/chart2/source/tools/ReferenceSizeProvider.cxx
index 6c99d4e2caeb..f7d6f3525c48 100644
--- a/chart2/source/tools/ReferenceSizeProvider.cxx
+++ b/chart2/source/tools/ReferenceSizeProvider.cxx
@@ -95,6 +95,8 @@ void ReferenceSizeProvider::setValuesAtTitle(
 void ReferenceSizeProvider::setValuesAtAllDataSeries()
 {
     rtl::Reference< Diagram > xDiagram( m_xChartDoc->getFirstChartDiagram());
+    if (!xDiagram)
+        return;
 
     // DataSeries/Points
     std::vector< rtl::Reference< DataSeries > > aSeries =

Reply via email to