[gnumeric] Slicer: avoid segfault.
- From: Morten Welinder <mortenw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnumeric] Slicer: avoid segfault.
- Date: Tue, 23 Apr 2013 01:18:38 +0000 (UTC)
commit 956a01003463f58cfedb0a5872b24ca8b6e1267e
Author: Morten Welinder <terra gnome org>
Date: Sat Apr 20 22:50:56 2013 -0400
Slicer: avoid segfault.
ChangeLog | 6 ++++++
src/go-data-slicer-field.c | 46 ++++++++++++++++++++++++++++++++++------------
2 files changed, 40 insertions(+), 12 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 5823372..e75b9ab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2013-04-20 Morten Welinder <terra gnome org>
+
+ * src/go-data-slicer-field.c
+ (go_data_slicer_field_set_field_type_pos): Add precondition for
+ slicer.
+
2013-04-22 Andreas J. Guelzow <aguelzow pyrshep ca>
* src/sheet.c (sheet_range_set_expr_cb): don't try to empty empty
diff --git a/src/go-data-slicer-field.c b/src/go-data-slicer-field.c
index 5e373e4..09ad0b4 100644
--- a/src/go-data-slicer-field.c
+++ b/src/go-data-slicer-field.c
@@ -63,8 +63,11 @@ static void
go_data_slicer_field_finalize (GObject *obj)
{
GODataSlicerField *dsf = (GODataSlicerField *)obj;
- go_string_unref (dsf->name); dsf->name = NULL;
- (parent_klass->finalize) (obj);
+
+ go_string_unref (dsf->name);
+ dsf->name = NULL;
+
+ parent_klass->finalize (obj);
}
static void
@@ -75,10 +78,19 @@ go_data_slicer_field_set_property (GObject *obj, guint property_id,
switch (property_id) {
/* we do not hold a ref */
- case PROP_SLICER : dsf->ds = g_value_get_object (value); break;
- case PROP_NAME : go_string_unref (dsf->name); dsf->name = g_value_dup_boxed (value); break;
- case PROP_DATA_CACHE_FIELD_INDEX : dsf->data_cache_field_indx = g_value_get_int (value); break;
- case PROP_AGGREGATIONS : dsf->aggregations = g_value_get_uint (value); break;
+ case PROP_SLICER:
+ dsf->ds = g_value_get_object (value);
+ break;
+ case PROP_NAME:
+ go_string_unref (dsf->name);
+ dsf->name = g_value_dup_boxed (value);
+ break;
+ case PROP_DATA_CACHE_FIELD_INDEX:
+ dsf->data_cache_field_indx = g_value_get_int (value);
+ break;
+ case PROP_AGGREGATIONS:
+ dsf->aggregations = g_value_get_uint (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
}
@@ -90,12 +102,21 @@ go_data_slicer_field_get_property (GObject *obj, guint property_id,
{
GODataSlicerField const *dsf = (GODataSlicerField const *)obj;
switch (property_id) {
- case PROP_SLICER : g_value_set_object (value, dsf->ds); break;
- case PROP_NAME : g_value_set_boxed (value, dsf->name); break; /* actual name, do not fall
back to cache */
- case PROP_INDEX : g_value_set_int (value, dsf->indx); break;
- case PROP_DATA_CACHE_FIELD_INDEX :
- g_value_set_int (value, dsf->data_cache_field_indx); break;
- case PROP_AGGREGATIONS : g_value_set_uint (value, dsf->aggregations); break;
+ case PROP_SLICER:
+ g_value_set_object (value, dsf->ds);
+ break;
+ case PROP_NAME:
+ g_value_set_boxed (value, dsf->name);
+ break; /* actual name, do not fall back to cache */
+ case PROP_INDEX:
+ g_value_set_int (value, dsf->indx);
+ break;
+ case PROP_DATA_CACHE_FIELD_INDEX:
+ g_value_set_int (value, dsf->data_cache_field_indx);
+ break;
+ case PROP_AGGREGATIONS:
+ g_value_set_uint (value, dsf->aggregations);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, property_id, pspec);
}
@@ -200,6 +221,7 @@ go_data_slicer_field_set_field_type_pos (GODataSlicerField *dsf,
int cur_pos, i;
g_return_if_fail (IS_GO_DATA_SLICER_FIELD (dsf));
+ g_return_if_fail (IS_GO_DATA_SLICER (dsf->ds));
g_return_if_fail (field_type > GDS_FIELD_TYPE_UNSET &&
field_type < GDS_FIELD_TYPE_MAX);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]