projects
/
pspp
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix several cases where lex_integer() or lex_number() could assert-fail.
[pspp]
/
src
/
language
/
data-io
/
get-data.c
diff --git
a/src/language/data-io/get-data.c
b/src/language/data-io/get-data.c
index 995be8e7ce896212cd9775af4789c1aa1441360a..f2c294264ce951c5e66597d5a66cd0cfd55f8e69 100644
(file)
--- 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);
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);
}
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"))
{
}
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);
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"))
{
}
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"))
{
}
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)
{
opts->sheet_index = lex_integer (lexer);
if (opts->sheet_index <= 0)
{