X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flanguage%2Fdata-io%2Fplacement-parser.c;h=671933382a534054816dc89c66e6892ed31a2475;hb=0fc606c52d7cec253af9b7463b15baabfbc9a33a;hp=549ac7501e73d3f804d82f97de5c4797d3de612e;hpb=8d9133ece0a6989d282e853a5a73db0c85bdb3a3;p=pspp diff --git a/src/language/data-io/placement-parser.c b/src/language/data-io/placement-parser.c index 549ac7501e..671933382a 100644 --- a/src/language/data-io/placement-parser.c +++ b/src/language/data-io/placement-parser.c @@ -27,6 +27,7 @@ #include "libpspp/pool.h" #include "libpspp/str.h" +#include "gl/c-strcase.h" #include "gl/xalloc.h" #include "gl/xsize.h" @@ -118,7 +119,7 @@ fixed_parse_columns (struct lexer *lexer, struct pool *pool, size_t var_cnt, int fc, lc; size_t i; - if ( !parse_column_range (lexer, 1, &fc, &lc, NULL) ) + if (!parse_column_range (lexer, 1, &fc, &lc, NULL)) return false; /* Divide columns evenly. */ @@ -220,9 +221,9 @@ fixed_parse_fortran (struct lexer *lexer, struct pool *pool, enum fmt_use use, if (!parse_abstract_format_specifier (lexer, type, &f.w, &f.d)) return false; - if (!strcasecmp (type, "T")) + if (!c_strcasecmp (type, "T")) f.type = PRS_TYPE_T; - else if (!strcasecmp (type, "X")) + else if (!c_strcasecmp (type, "X")) { f.type = PRS_TYPE_X; f.w = count; @@ -298,7 +299,7 @@ execute_placement_format (const struct fmt_spec *format, } } -bool +static bool parse_column__ (int value, int base, int *column) { assert (base == 0 || base == 1); @@ -400,16 +401,17 @@ parse_record_placement (struct lexer *lexer, int *record, int *column) { if (lex_is_integer (lexer)) { - if (lex_integer (lexer) <= *record) + long n = lex_integer (lexer); + if (n <= *record || n > INT_MAX) { msg (SE, _("The record number specified, %ld, is at or " "before the previous record, %d. Data " "fields must be listed in order of " "increasing record number."), - lex_integer (lexer), *record); + n, *record); return false; } - *record = lex_integer (lexer); + *record = n; lex_get (lexer); } else