[Top][All Lists]
[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.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Pspp-cvs] pspp/src math/linreg/linreg.c math/linreg/Chang...,
Jason H Stover <=