[gnumeric] Fix crash when the embedded spreadsheet is invalid. [#481]
- From: Jean Bréfort <jbrefort src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Fix crash when the embedded spreadsheet is invalid. [#481]
- Date: Sat, 25 Apr 2020 15:00:21 +0000 (UTC)
commit 0fd35c2d43ef6be97129c3f5a575e224b6671538
Author: Jean Brefort <jean brefort normalesup org>
Date: Sat Apr 25 16:59:22 2020 +0200
Fix crash when the embedded spreadsheet is invalid. [#481]
ChangeLog | 9 +++++++++
NEWS | 3 +++
component/gnumeric.c | 15 ++++++++++++---
src/sheet-object-component.c | 2 ++
4 files changed, 26 insertions(+), 3 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 26c708f72..daee1f1b2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2020-04-25 Jean Brefort <jean brefort normalesup org>
+
+ reviewed by: <delete if not using a buddy>
+
+ * component/gnumeric.c (go_gnm_component_update_data),
+ (go_gnm_component_set_data), (go_gnm_component_render):
+ * src/sheet-object-component.c (soc_xml_finish),
+ (sheet_object_component_new):
+
2020-04-24 Morten Welinder <terra gnome org>
* src/dependent.c (sheet_region_queue_recalc): Fix problem with
diff --git a/NEWS b/NEWS
index 970ee6372..3503bb0c9 100644
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,8 @@
Gnumeric 1.12.47
+Jean:
+ * Fix crash when the embedded spreadsheet is invalid. [#481]
+
Morten:
* Fix dialog size problem.
* Add "--set CELL=CONTENTS" option to ssconvert.
diff --git a/component/gnumeric.c b/component/gnumeric.c
index 79bcb0761..2f96dcfd1 100644
--- a/component/gnumeric.c
+++ b/component/gnumeric.c
@@ -110,6 +110,7 @@ go_gnm_component_update_data (GOGnmComponent *gognm)
{
SheetView *sv;
GnmRange const *range;
+ g_return_if_fail (GNM_IS_WORKBOOK_VIEW (gognm->wv));
gognm->sheet = wb_view_cur_sheet (gognm->wv);
sv = sheet_get_view (gognm->sheet, gognm->wv);
range = selection_first_range (sv, NULL, NULL);
@@ -138,10 +139,17 @@ go_gnm_component_set_data (GOComponent *component)
if (gognm->wv != NULL) {
g_object_unref (gognm->wv);
g_object_unref (gognm->wb);
+ gognm->wv = NULL;
}
gognm->wv = workbook_view_new_from_input (input, NULL, NULL, io_context, NULL);
- gognm->wb = wb_view_get_workbook (gognm->wv);
- gnm_app_workbook_list_remove (gognm->wb);
+ if (!GNM_IS_WORKBOOK_VIEW (gognm->wv)) {
+ g_warning ("Invalid component data");
+ gognm->wv = NULL;
+ gognm->wb = NULL;
+ } else {
+ gognm->wb = wb_view_get_workbook (gognm->wv);
+ gnm_app_workbook_list_remove (gognm->wb);
+ }
g_object_unref (io_context);
go_gnm_component_update_data (gognm);
}
@@ -152,6 +160,7 @@ go_gnm_component_render (GOComponent *component, cairo_t *cr, double width_pixel
GOGnmComponent *gognm = GO_GNM_COMPONENT (component);
GnmRange range;
+ g_return_if_fail (GNM_IS_WORKBOOK_VIEW (gognm->wv));
if (!gognm->sheet)
go_gnm_component_update_data (gognm);
@@ -182,7 +191,7 @@ cb_gognm_save (G_GNUC_UNUSED GtkAction *a, WBCGtk *wbcg)
g_object_unref (gognm->wv);
g_object_unref (gognm->wb);
}
- gognm->wv = g_object_ref (wv);
+ gognm->wv = g_object_ref (wv);
gognm->wb = wb_view_get_workbook (wv);
gnm_app_workbook_list_remove (gognm->wb); /* no need to have this one in the list */
}
diff --git a/src/sheet-object-component.c b/src/sheet-object-component.c
index 2305e4fb5..135698602 100644
--- a/src/sheet-object-component.c
+++ b/src/sheet-object-component.c
@@ -304,6 +304,7 @@ static void
soc_xml_finish (GOComponent *component, SheetObject *so)
{
sheet_object_component_set_component (so, component);
+ g_object_unref (component);
}
static void
@@ -456,6 +457,7 @@ sheet_object_component_new (GOComponent *component)
{
SheetObjectComponent *soc = g_object_new (GNM_SO_COMPONENT_TYPE, NULL);
sheet_object_component_set_component (GNM_SO (soc), component);
+ g_object_unref (component);
return GNM_SO (soc);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]