chart2/source/controller/dialogs/DialogModel.cxx |   17 +++++++++----
 sw/qa/uitest/writer_tests7/tdf132714.py          |   28 +++++++++++++++++++++++
 2 files changed, 40 insertions(+), 5 deletions(-)

New commits:
commit e706698353a7187f46ddbf0faf1f6f7772753df6
Author:     László Németh <nem...@numbertext.org>
AuthorDate: Mon Feb 27 13:56:01 2023 +0100
Commit:     László Németh <nem...@numbertext.org>
CommitDate: Mon Feb 27 22:46:29 2023 +0000

    tdf#153859 sw: crash fix for setting chart with deleted data table
    
    Opening Data Ranges dialog window of a chart with
    deleted data table crashed Writer immediately.
    
    Follow-up to commit 5b9855acc7fa6d1e4a5f53ff0bc47e1dd4729827
    "tdf#132714 sw: fix crash at table row deletion associated
    to a chart".
    
    Change-Id: I96e901db75d40ae234f58827a957204bca13aa92
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147893
    Tested-by: László Németh <nem...@numbertext.org>
    Reviewed-by: László Németh <nem...@numbertext.org>

diff --git a/chart2/source/controller/dialogs/DialogModel.cxx 
b/chart2/source/controller/dialogs/DialogModel.cxx
index 564343c62671..d6d1fbd71b97 100644
--- a/chart2/source/controller/dialogs/DialogModel.cxx
+++ b/chart2/source/controller/dialogs/DialogModel.cxx
@@ -631,13 +631,20 @@ void DialogModel::setCategories( const Reference< 
chart2::data::XLabeledDataSequ
 
 OUString DialogModel::getCategoriesRange() const
 {
-    uno::Reference< chart2::data::XLabeledDataSequence > xLSeq( 
getCategories());
     OUString aRange;
-    if( xLSeq.is())
+    try
+    {
+        uno::Reference< chart2::data::XLabeledDataSequence > xLSeq( 
getCategories());
+        if( xLSeq.is())
+        {
+            Reference< data::XDataSequence > xSeq( xLSeq->getValues());
+            if( xSeq.is())
+                aRange = xSeq->getSourceRangeRepresentation();
+        }
+    }
+    catch (const lang::DisposedException&)
     {
-        Reference< data::XDataSequence > xSeq( xLSeq->getValues());
-        if( xSeq.is())
-            aRange = xSeq->getSourceRangeRepresentation();
+        TOOLS_WARN_EXCEPTION( "chart2", "unexpected exception caught" );
     }
     return aRange;
 }
diff --git a/sw/qa/uitest/writer_tests7/tdf132714.py 
b/sw/qa/uitest/writer_tests7/tdf132714.py
index 7ccedbeb6f4d..cad8ff24e80d 100644
--- a/sw/qa/uitest/writer_tests7/tdf132714.py
+++ b/sw/qa/uitest/writer_tests7/tdf132714.py
@@ -66,4 +66,32 @@ class tdf132714(UITestCase):
             # Without the fix in place, this test would have crashed here
             xToolkitRobot.mouseMove(xMouseEvent)
 
+    def test_data_ranges(self):
+        with self.ui_test.load_file(get_url_for_data_file("tdf132714.odt")) as 
document:
+
+            # delete second row (first data row) in the associated text table 
of the chart
+            self.xUITest.executeCommand(".uno:GoDown")
+            self.xUITest.executeCommand(".uno:GoDown")
+            # Without the fix in place, at this point crash occurs.
+            self.xUITest.executeCommand(".uno:DeleteTable")
+
+            # select embedded chart
+            self.assertEqual(1, document.EmbeddedObjects.Count)
+            
document.CurrentController.select(document.getEmbeddedObjects().getByIndex(0))
+            self.assertEqual("SwXTextEmbeddedObject", 
document.CurrentSelection.getImplementationName())
+
+            xChartMainTop = self.xUITest.getTopFocusWindow()
+            xWriterEdit = xChartMainTop.getChild("writer_edit")
+            # edit object by pressing Enter
+            xWriterEdit.executeAction("TYPE", 
mkPropertyValues({"KEYCODE":"RETURN"}))
+
+            # open DataRanges dialog window
+            xChartMain = xChartMainTop.getChild("chart_window")
+            xSeriesObj =  xChartMain.getChild("CID/Page=")
+
+            # Without the fix in place, this test would have crashed here
+            with self.ui_test.execute_dialog_through_action(xSeriesObj, 
"COMMAND", mkPropertyValues({"COMMAND": "DataRanges"})) as xDialog:
+                pass
+
+
 # vim: set shiftwidth=4 softtabstop=4 expandtab:

Reply via email to