pspp-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Pspp-cvs] pspp/src math/linreg/linreg.c math/linreg/Chang...


From: Jason H Stover
Subject: [Pspp-cvs] pspp/src math/linreg/linreg.c math/linreg/Chang...
Date: Thu, 12 Apr 2007 22:40:53 +0000

CVSROOT:        /sources/pspp
Module name:    pspp
Changes by:     Jason H Stover <jstover>        07/04/12 22:40:53

Modified files:
        src/math/linreg: linreg.c ChangeLog 
        src/language/stats: regression.q ChangeLog 

Log message:
        fix bug 19581

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/pspp/src/math/linreg/linreg.c?cvsroot=pspp&r1=1.17&r2=1.18
http://cvs.savannah.gnu.org/viewcvs/pspp/src/math/linreg/ChangeLog?cvsroot=pspp&r1=1.15&r2=1.16
http://cvs.savannah.gnu.org/viewcvs/pspp/src/language/stats/regression.q?cvsroot=pspp&r1=1.48&r2=1.49
http://cvs.savannah.gnu.org/viewcvs/pspp/src/language/stats/ChangeLog?cvsroot=pspp&r1=1.48&r2=1.49

Patches:
Index: math/linreg/linreg.c
===================================================================
RCS file: /sources/pspp/pspp/src/math/linreg/linreg.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- math/linreg/linreg.c        23 Dec 2006 06:11:33 -0000      1.17
+++ math/linreg/linreg.c        12 Apr 2007 22:40:53 -0000      1.18
@@ -182,6 +182,8 @@
   int i;
 
   pspp_linreg_cache *c = m;
+  if (c != NULL)
+    {
   gsl_vector_free (c->indep_means);
   gsl_vector_free (c->indep_std);
   gsl_vector_free (c->ss_indeps);
@@ -191,6 +193,7 @@
       pspp_coeff_free (c->coeff[i]);
     }
   free (c);
+    }
   return true;
 }
 

Index: math/linreg/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/math/linreg/ChangeLog,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -b -r1.15 -r1.16
--- math/linreg/ChangeLog       7 Dec 2006 05:16:33 -0000       1.15
+++ math/linreg/ChangeLog       12 Apr 2007 22:40:53 -0000      1.16
@@ -1,3 +1,8 @@
+2007-04-12  Jason Stover  <address@hidden>
+
+       * linreg.c: (pspp_linreg_cache_free) Check for null pointer before
+       freeing.
+
 Wed Dec  6 21:16:22 2006  Ben Pfaff  <address@hidden>
 
        * linreg.c: (pspp_linreg_get_vars) Compare variable pointers

Index: language/stats/regression.q
===================================================================
RCS file: /sources/pspp/pspp/src/language/stats/regression.q,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- language/stats/regression.q 2 Apr 2007 08:55:52 -0000       1.48
+++ language/stats/regression.q 12 Apr 2007 22:40:53 -0000      1.49
@@ -279,7 +279,9 @@
       /*
          P values for the test statistic above.
        */
-      pval = 2 * gsl_cdf_tdist_Q (fabs (t_stat), (double) (c->n_obs - 
c->n_coeffs));
+      pval =
+       2 * gsl_cdf_tdist_Q (fabs (t_stat),
+                            (double) (c->n_obs - c->n_coeffs));
       tab_float (t, 6, j + 1, 0, pval, 10, 2);
     }
   tab_title (t, _("Coefficients"));
@@ -643,7 +645,8 @@
 }
 
 static void
-reg_get_name (const struct dictionary *dict, char name[LONG_NAME_LEN], const 
char prefix[LONG_NAME_LEN])
+reg_get_name (const struct dictionary *dict, char name[LONG_NAME_LEN],
+             const char prefix[LONG_NAME_LEN])
 {
   int i = 1;
 
@@ -718,10 +721,12 @@
     {
       for (lc = models; lc < models + cmd.n_dependent; lc++)
        {
-         assert (*lc != NULL);
+         if (*lc != NULL)
+           {
          pspp_linreg_cache_free (*lc);
        }
     }
+    }
 }
 
 static int
@@ -779,11 +784,9 @@
       int j;
       
       fprintf (fp, "%s.name = \"%s\";\n\t",
-               var_get_name (varlist[i]),
-              var_get_name (varlist[i]));
+              var_get_name (varlist[i]), var_get_name (varlist[i]));
       fprintf (fp, "%s.n_vals = %d;\n\t",
-               var_get_name (varlist[i]),
-               n_categories);
+              var_get_name (varlist[i]), n_categories);
 
       for (j = 0; j < n_categories; j++)
        {
@@ -924,7 +927,8 @@
 }
 
 static int
-regression_custom_export (struct lexer *lexer, struct dataset *ds UNUSED, 
struct cmd_regression *cmd UNUSED, void *aux UNUSED)
+regression_custom_export (struct lexer *lexer, struct dataset *ds UNUSED,
+                         struct cmd_regression *cmd UNUSED, void *aux UNUSED)
 {
   /* 0 on failure, 1 on success, 2 on failure that should result in syntax 
error */
   if (!lex_force_match (lexer, '('))
@@ -948,10 +952,16 @@
 int
 cmd_regression (struct lexer *lexer, struct dataset *ds)
 {
+  size_t i;
+
   if (!parse_regression (lexer, ds, &cmd, NULL))
     return CMD_FAILURE;
 
   models = xnmalloc (cmd.n_dependent, sizeof *models);
+  for (i = 0; i < cmd.n_dependent; i++)
+    {
+      models[i] = NULL;
+    }
   if (!multipass_procedure_with_splits (ds, run_regression, &cmd))
     return CMD_CASCADING_FAILURE;
   subcommand_save (ds, cmd.sbc_save, models);
@@ -1020,12 +1030,14 @@
 
   lex_match (lexer, '=');
 
-  if ((lex_token (lexer) != T_ID || dict_lookup_var (dict, lex_tokid (lexer)) 
== NULL)
+  if ((lex_token (lexer) != T_ID
+       || dict_lookup_var (dict, lex_tokid (lexer)) == NULL)
       && lex_token (lexer) != T_ALL)
     return 2;
 
 
-  if (!parse_variables_const (lexer, dict, &v_variables, &n_variables, 
PV_NONE))
+  if (!parse_variables_const
+      (lexer, dict, &v_variables, &n_variables, PV_NONE))
     {
       free (v_variables);
       return 0;
@@ -1087,7 +1099,8 @@
              cat_stored_values_create (v_variables[i]);
            }
          n_data =
-           mark_missing_cases (cf, v_variables[i], is_missing_case, n_data, 
mom + i);
+           mark_missing_cases (cf, v_variables[i], is_missing_case, n_data,
+                               mom + i);
        }
     }
   /*
@@ -1110,7 +1123,8 @@
   Put the moments in the linreg cache.
  */
 static void
-compute_moments (pspp_linreg_cache *c, struct moments_var *mom, struct 
design_matrix *dm, size_t n)
+compute_moments (pspp_linreg_cache * c, struct moments_var *mom,
+                struct design_matrix *dm, size_t n)
 {
   size_t i;
   size_t j;
@@ -1139,7 +1153,8 @@
 }
 static bool
 run_regression (const struct ccase *first,
-               const struct casefile *cf, void *cmd_ UNUSED, const struct 
dataset *ds)
+               const struct casefile *cf, void *cmd_ UNUSED,
+               const struct dataset *ds)
 {
   size_t i;
   size_t n_data = 0;           /* Number of valide cases. */
@@ -1207,6 +1222,8 @@
       n_data = prepare_data (n_cases, is_missing_case, indep_vars,
                             cmd.v_dependent[k],
                             (const struct casefile *) cf, mom);
+      if (n_data > 0)
+       {
       Y = gsl_vector_alloc (n_data);
 
       X =
@@ -1293,6 +1310,7 @@
       free (lopts.get_indep_mean_std);
       casereader_destroy (r);
     }
+    }
   for (i = 0; i < n_variables; i++)
     {
       moments1_destroy ((mom + i)->m);

Index: language/stats/ChangeLog
===================================================================
RCS file: /sources/pspp/pspp/src/language/stats/ChangeLog,v
retrieving revision 1.48
retrieving revision 1.49
diff -u -b -r1.48 -r1.49
--- language/stats/ChangeLog    30 Mar 2007 02:16:41 -0000      1.48
+++ language/stats/ChangeLog    12 Apr 2007 22:40:53 -0000      1.49
@@ -1,3 +1,8 @@
+2007-04-12  Jason Stover  <address@hidden>
+
+       * regression.q (run_regression): Added if (n_data >0) to fix bug
+       19581.
+
 2007-03-29  Jason Stover  <address@hidden>
 
        * regression.q (prepare_data): New function.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]