Fixed bug which crashed gui if it attempted to enter invalid variable names.
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 26 Jan 2007 10:57:15 +0000 (10:57 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 26 Jan 2007 10:57:15 +0000 (10:57 +0000)
src/ui/gui/psppire-dict.c
src/ui/gui/psppire-dict.h
src/ui/gui/psppire-var-store.c

index 42025f2dc7598fe50f9cdb5dcff30f816ab14952..b32d0677ba9b04ab22663c312c73f3ec7e4b6017 100644 (file)
@@ -343,13 +343,15 @@ psppire_dict_delete_variables (PsppireDict *d, gint first, gint n)
 }
 
 
-void
+gboolean
 psppire_dict_set_name (PsppireDict* d, gint idx, const gchar *name)
 {
   struct variable *var;
   g_assert (d);
   g_assert (PSPPIRE_IS_DICT (d));
 
+  if ( ! var_is_valid_name (name, false))
+    return FALSE;
 
   if ( idx < dict_get_var_cnt (d->dict))
     {
@@ -362,6 +364,8 @@ psppire_dict_set_name (PsppireDict* d, gint idx, const gchar *name)
       /* new variable */
       dict_create_var (d->dict, name, 0);
     }
+
+  return TRUE;
 }
 
 
@@ -735,11 +739,16 @@ tree_model_nth_child (GtkTreeModel *model, GtkTreeIter *iter,
 }
 
 
-void
+gboolean
 psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
-                        const gchar *text)
+                        const gchar *name)
 {
-  dict_rename_var (dict->dict, v, text);
+  if ( ! var_is_valid_name (name, false))
+    return FALSE;
+  
+  dict_rename_var (dict->dict, v, name);
+
+  return TRUE;
 }
 
 
index f070bfeb25af4c85c6dd1564041a9939bf535eb0..8756dbd8b933ab64d6c9d8d9ed27896c23f8498d 100644 (file)
@@ -66,8 +66,8 @@ struct _PsppireDictClass
 
 /* -- PsppireDict --- */
 GType          psppire_dict_get_type (void);
-PsppireDict*     psppire_dict_new_from_dict (struct dictionary *d);
-void           psppire_dict_set_name (PsppireDict* s, gint idx, const gchar *name);
+PsppireDict*   psppire_dict_new_from_dict (struct dictionary *d);
+gboolean       psppire_dict_set_name (PsppireDict* s, gint idx, const gchar *name);
 void           psppire_dict_delete_var (PsppireDict *s, gint idx);
 
 /* Return the number of variables in the dictionary */
@@ -99,7 +99,7 @@ gboolean psppire_dict_check_name (const PsppireDict *dict,
 
 gint psppire_dict_get_next_value_idx (const PsppireDict *dict);
 
-void psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
+gboolean psppire_dict_rename_var (PsppireDict *dict, struct variable *v,
                              const gchar *text);
 
 void psppire_dict_replace_dictionary (PsppireDict *, struct dictionary *);
index 9ce4f38f63245e5ae8a98de5e2614b3140e5798a..3b3011f0a10a4837c70daa0a408196957b4c4c0f 100644 (file)
@@ -394,8 +394,7 @@ psppire_var_store_set_string (GSheetModel *model,
   switch (col)
     {
     case COL_NAME:
-      psppire_dict_rename_var (var_store->dict, pv, text);
-      return TRUE;
+      return psppire_dict_rename_var (var_store->dict, pv, text);
       break;
     case COL_COLUMNS:
       if ( ! text) return FALSE;