Categoricals: Dont crash when getting non-existant user data
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 16 Mar 2012 13:43:06 +0000 (14:43 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 16 Mar 2012 13:43:06 +0000 (14:43 +0100)
src/math/categoricals.c

index 5aeb7e213c6d564f95f424321e42a9ace4b91112..5b5e2539adc104f18532a39dafbf02677e2bf87b 100644 (file)
@@ -697,8 +697,14 @@ categoricals_get_n_variables (const struct categoricals *cat)
 const struct ccase *
 categoricals_get_case_by_category_real (const struct categoricals *cat, int iact, int n)
 {
+  const struct interaction_value *vn;
+
   const struct interact_params *vp = &cat->iap[iact];
-  const struct interaction_value *vn = vp->reverse_interaction_value_map [n];
+
+  if ( n >= hmap_count (&vp->ivmap))
+    return NULL;
+
+  vn = vp->reverse_interaction_value_map [n];
 
   return vn->ccase;
 }
@@ -708,7 +714,12 @@ void *
 categoricals_get_user_data_by_category_real (const struct categoricals *cat, int iact, int n)
 {
   const struct interact_params *vp = &cat->iap[iact];
-  const struct interaction_value *iv = vp->reverse_interaction_value_map [n];
+  const struct interaction_value *iv ;
+
+  if ( n >= hmap_count (&vp->ivmap))
+    return NULL;
+
+  iv = vp->reverse_interaction_value_map [n];
 
   return iv->user_data;
 }