From: Ben Pfaff Date: Sun, 21 Feb 2016 19:51:05 +0000 (-0800) Subject: Fix several cases where lex_integer() or lex_number() could assert-fail. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?p=pspp;a=commitdiff_plain;h=6363022343d69fa3662e5043aad2dd0e33eb790f Fix several cases where lex_integer() or lex_number() could assert-fail. The caller always needs to make sure in advance that the token is in fact an integer or a number. --- diff --git a/src/language/data-io/get-data.c b/src/language/data-io/get-data.c index 995be8e7ce..f2c294264c 100644 --- a/src/language/data-io/get-data.c +++ b/src/language/data-io/get-data.c @@ -174,14 +174,20 @@ parse_get_psql (struct lexer *lexer, struct dataset *ds) if ( lex_match_id (lexer, "ASSUMEDSTRWIDTH")) { lex_match (lexer, T_EQUALS); - psql.str_width = lex_integer (lexer); - lex_get (lexer); + if (lex_force_int (lexer)) + { + psql.str_width = lex_integer (lexer); + lex_get (lexer); + } } else if ( lex_match_id (lexer, "BSIZE")) { lex_match (lexer, T_EQUALS); - psql.bsize = lex_integer (lexer); - lex_get (lexer); + if (lex_force_int (lexer)) + { + psql.bsize = lex_integer (lexer); + lex_get (lexer); + } } else if ( lex_match_id (lexer, "UNENCRYPTED")) { @@ -250,8 +256,11 @@ parse_spreadsheet (struct lexer *lexer, char **filename, if ( lex_match_id (lexer, "ASSUMEDSTRWIDTH")) { lex_match (lexer, T_EQUALS); - opts->asw = lex_integer (lexer); - lex_get (lexer); + if (lex_force_int (lexer)) + { + opts->asw = lex_integer (lexer); + lex_get (lexer); + } } else if (lex_match_id (lexer, "SHEET")) { @@ -268,6 +277,9 @@ parse_spreadsheet (struct lexer *lexer, char **filename, } else if (lex_match_id (lexer, "INDEX")) { + if (!lex_force_int (lexer)) + goto error; + opts->sheet_index = lex_integer (lexer); if (opts->sheet_index <= 0) { diff --git a/src/language/stats/examine.c b/src/language/stats/examine.c index dc0d6c5bee..20cd2f4518 100644 --- a/src/language/stats/examine.c +++ b/src/language/stats/examine.c @@ -1999,6 +1999,8 @@ cmd_examine (struct lexer *lexer, struct dataset *ds) int extr = 5; if (lex_match (lexer, T_LPAREN)) { + if (!lex_force_int (lexer)) + goto error; extr = lex_integer (lexer); if (extr < 0) diff --git a/src/language/stats/npar.c b/src/language/stats/npar.c index 5d8d8742f9..d89eb0b876 100644 --- a/src/language/stats/npar.c +++ b/src/language/stats/npar.c @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. -*-c-*- - Copyright (C) 2006, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2006, 2008, 2009, 2010, 2011, 2016 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 @@ -865,6 +865,8 @@ npar_chisquare (struct lexer *lexer, struct dataset *ds, if ( lex_match (lexer, T_ASTERISK)) { n = f; + if (!lex_force_num (lexer)) + return 0; f = lex_number (lexer); lex_get (lexer); }