X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fstats%2Ft-test-parser.c;h=9a0043aa45761db7771a25a96a2f7db02b046e39;hb=c84078d8498785e9a52945cc63fb663cd48027af;hp=6b14adbdb35ff4c6b072583a54c1ba2104f730ce;hpb=137fae2d8d88234543d9b41286c20e6ba8b2cd98;p=pspp diff --git a/src/language/stats/t-test-parser.c b/src/language/stats/t-test-parser.c index 6b14adbdb3..9a0043aa45 100644 --- a/src/language/stats/t-test-parser.c +++ b/src/language/stats/t-test-parser.c @@ -44,9 +44,9 @@ 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; @@ -80,7 +80,8 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) mode_count++; tt.mode = MODE_SINGLE; lex_match (lexer, T_EQUALS); - lex_force_num (lexer); + if (!lex_force_num (lexer)) + goto parse_failed; testval = lex_number (lexer); lex_get (lexer); } @@ -100,14 +101,16 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) value_init (&gval0, var_get_width (gvar)); parse_value (lexer, &gval0, gvar); cut = true; - if (lex_match (lexer, T_COMMA)) + if (lex_token (lexer) != T_RPAREN) { + lex_match (lexer, T_COMMA); value_init (&gval1, var_get_width (gvar)); parse_value (lexer, &gval1, gvar); cut = false; } - lex_force_match (lexer, T_RPAREN); + if (! lex_force_match (lexer, T_RPAREN)) + goto parse_failed; } else { @@ -272,13 +275,15 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds) else if (lex_match_id (lexer, "CRITERIA")) { lex_match (lexer, T_EQUALS); - if ( lex_force_match_id (lexer, "CI")) + if ( lex_match_id (lexer, "CIN") || lex_force_match_id (lexer, "CI")) if ( lex_force_match (lexer, T_LPAREN)) { - lex_force_num (lexer); + if (!lex_force_num (lexer)) + 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 @@ -362,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; }