chart2/source/controller/dialogs/ObjectNameProvider.cxx | 26 +
chart2/source/tools/DataSeriesHelper.cxx| 13 +++-
sw/qa/uitest/writer_tests7/tdf132714.py | 46
sw/source/core/unocore/unochart.cxx | 25 +---
4 files changed, 89 insertions(+), 21 deletions(-)
New commits:
commit 78373e81c79a8afe67ffe3ac84aef5649fcf489a
Author: László Németh
AuthorDate: Mon Feb 27 11:20:09 2023 +0100
Commit: Caolán McNamara
CommitDate: Tue Mar 7 16:50:00 2023 +
tdf#153858 sw: crash fix for chart with deleted data table
Using mouse, e.g. simply moving the mouse pointer
during editing a chart with a 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: I6d89eabc84565c548e2d9ded922789d623367ce4
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147882
Tested-by: László Németh
Reviewed-by: László Németh
(cherry picked from commit 4f2dcc4bc70c3602e2612dab611b610410637920)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/147898
Tested-by: Jenkins
Reviewed-by: Caolán McNamara
diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
index 2bf6af62..c60ff1ca364a 100644
--- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
+++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
@@ -124,13 +124,15 @@ OUString lcl_getDataPointValueText( const rtl::Reference<
DataSeries >& xSeries,
uno::Reference xDataSequence(
aDataSequences[nN]->getValues());
if( !xDataSequence.is() )
continue;
-Sequence< Any > aData( xDataSequence->getData() );
-if( nPointIndex >= aData.getLength() )
-continue;
-uno::Reference xProp(xDataSequence,
uno::UNO_QUERY );
-if( xProp.is())
+
+try
{
-try
+Sequence< Any > aData( xDataSequence->getData() );
+
+if( nPointIndex >= aData.getLength() )
+continue;
+uno::Reference xProp(xDataSequence,
uno::UNO_QUERY );
+if( xProp.is())
{
uno::Any aARole = xProp->getPropertyValue( "Role" );
OUString aRole;
@@ -179,10 +181,14 @@ OUString lcl_getDataPointValueText( const rtl::Reference<
DataSeries >& xSeries,
a_Size = aNumberFormatterWrapper.getFormattedString(
nNumberFormatKey, fValue, nLabelColor, bColorChanged );
}
}
-catch( const uno::Exception& )
-{
-TOOLS_WARN_EXCEPTION("chart2", "" );
-}
+}
+catch (const lang::DisposedException&)
+{
+TOOLS_WARN_EXCEPTION( "chart2", "unexpected exception caught" );
+}
+catch( const uno::Exception& )
+{
+TOOLS_WARN_EXCEPTION("chart2", "" );
}
}
diff --git a/chart2/source/tools/DataSeriesHelper.cxx
b/chart2/source/tools/DataSeriesHelper.cxx
index e2bc3cfbe7d0..47b3ad979b05 100644
--- a/chart2/source/tools/DataSeriesHelper.cxx
+++ b/chart2/source/tools/DataSeriesHelper.cxx
@@ -208,10 +208,17 @@ uno::Reference< chart2::data::XLabeledDataSequence >
if( ! xSource.is())
return aNoResult;
const Sequence< Reference< chart2::data::XLabeledDataSequence > >
aLabeledSeq( xSource->getDataSequences());
-for (auto const & i : aLabeledSeq)
+try
+{
+for (auto const & i : aLabeledSeq)
+{
+if (lcl_MatchesRole(aRole, bMatchPrefix)(i))
+return i;
+}
+}
+catch (const lang::DisposedException&)
{
-if (lcl_MatchesRole(aRole, bMatchPrefix)(i))
-return i;
+TOOLS_WARN_EXCEPTION( "chart2", "unexpected exception caught" );
}
return aNoResult;
diff --git a/sw/qa/uitest/writer_tests7/tdf132714.py
b/sw/qa/uitest/writer_tests7/tdf132714.py
index 971db5f97ad3..7ccedbeb6f4d 100644
--- a/sw/qa/uitest/writer_tests7/tdf132714.py
+++ b/sw/qa/uitest/writer_tests7/tdf132714.py
@@ -8,6 +8,9 @@
#
from uitest.framework import UITestCase
from uitest.uihelper.common import get_url_for_data_file
+from libreoffice.uno.propertyvalue import mkPropertyValues
+from com.sun.star.awt import MouseButton
+from com.sun.star.awt import MouseEvent
class tdf132714(UITestCase):
def test_tdf132714(self):
@@ -20,4 +23,47 @@ class tdf132714(UITestCase):
# Without the fix in place, at this point crash occurs.
self.xUITest.executeCommand(".uno:DeleteRows")
+def test_delete_table(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
+