Check the return value of various calls to lex_force_match.
[pspp] / src / language / stats / t-test-parser.c
index 9e134e2a72372f79f7d57f59df04a102f402771a..7af0dfc9c606b24f72e8c5be5d44327732f78db2 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2011 Free Software Foundation, Inc.
+   Copyright (C) 2011, 2015 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -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, "CIN"))
+         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