X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Flanguage%2Fstats%2Ft-test-parser.c;h=26fc7ba56cb7307fc37c32b226fdbc12550c8cb0;hb=ad4f9604cc877272fe504234e8b9078a7ce76e17;hp=bc9de94a4014db42ab3580539d6ed7a22d17d85e;hpb=50fff4a3fd07c7805efef5ff24086c0a2c597955;p=pspp diff --git a/src/language/stats/t-test-parser.c b/src/language/stats/t-test-parser.c index bc9de94a40..26fc7ba56c 100644 --- a/src/language/stats/t-test-parser.c +++ b/src/language/stats/t-test-parser.c @@ -44,10 +44,10 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) /* Variables pertaining to the paired mode */ const struct variable **v1 = NULL; - size_t n_v1; + size_t n_v1 = 0; const struct variable **v2 = NULL; - size_t n_v2; - + size_t n_v2 = 0; + size_t n_pairs = 0; vp *pairs = NULL; @@ -94,7 +94,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) if (NULL == (gvar = parse_variable (lexer, dict))) goto parse_failed; - + if (lex_match (lexer, T_LPAREN)) { @@ -109,7 +109,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) cut = false; } - lex_force_match (lexer, T_RPAREN); + if (! lex_force_match (lexer, T_RPAREN)) + goto parse_failed; } else { @@ -179,7 +180,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) n_pairs = n_v1; else n_pairs = n_v1 * n_v2; - + pairs = xcalloc (n_pairs, sizeof *pairs); if ( with) @@ -192,7 +193,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) vp *pair = &pairs[i]; (*pair)[0] = v1[i]; (*pair)[1] = v2[i]; - } + } } else { @@ -281,10 +282,11 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) goto parse_failed; tt.confidence = lex_number (lexer); lex_get (lexer); - lex_force_match (lexer, T_RPAREN); + if (! lex_force_match (lexer, T_RPAREN)) + goto parse_failed; } } - else + else { lex_error (lexer, NULL); goto parse_failed; @@ -365,12 +367,17 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) free (pairs); free (v1); free (v2); - free (tt.vars); return ok ? CMD_SUCCESS : CMD_FAILURE; parse_failed: + + free (pairs); + free (v1); + free (v2); + free (tt.vars); + return CMD_FAILURE; }