[gnumeric] Slicer: avoid segfault.



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]