From a498159e88a2d5355055bcb17525555a2da74bda Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sat, 29 Apr 2023 17:44:51 -0700 Subject: [PATCH] combine-files: Fix crash when no files are given. ADD FILES, MATCH FILES, and UPDATE would crash if no files were given. This fixes the problem. --- src/language/commands/combine-files.c | 5 +++++ tests/language/commands/match-files.at | 5 +++++ tests/language/commands/update.at | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/language/commands/combine-files.c b/src/language/commands/combine-files.c index 6743c5e7a9..dd54f90a93 100644 --- a/src/language/commands/combine-files.c +++ b/src/language/commands/combine-files.c @@ -185,6 +185,11 @@ combine_files (enum comb_command_type command, type = COMB_TABLE; table_idx = MIN (table_idx, proc.n_files); } + else if (!proc.n_files) + { + lex_error_expecting (lexer, "FILE", "TABLE"); + goto error; + } else break; lex_match (lexer, T_EQUALS); diff --git a/tests/language/commands/match-files.at b/tests/language/commands/match-files.at index f59c7a01a5..74a1f3c3be 100644 --- a/tests/language/commands/match-files.at +++ b/tests/language/commands/match-files.at @@ -297,6 +297,7 @@ MATCH FILES/FILE='x.sav'/SORT/FILE=*/RENAME(name=name2)/SORT. MATCH FILES/FILE='x.sav'/FILE=*/RENAME(name=name2)/FIRST=x. MATCH FILES/FILE='x.sav'/FILE=*/RENAME(name=name2)/LAST=x. MATCH FILES/FILE='x.sav'/FILE=*/RENAME(name=name2)/IN=x. +MATCH FILES/KEEP=**. ]) AT_CHECK([pspp --testing-mode -O format=csv insert.sps], [1], [dnl "match-files.sps:1.18: error: MATCH FILES: Cannot specify the active dataset since none has been defined. @@ -392,5 +393,9 @@ match-files.sps:20: error: MATCH FILES: Variable name has different type or widt "match-files.sps:39.55: error: MATCH FILES: Variable name x specified on IN subcommand duplicates an existing variable name. 39 | MATCH FILES/FILE='x.sav'/FILE=*/RENAME(name=name2)/IN=x. | ^" + +"match-files.sps:40.13-40.16: error: MATCH FILES: Syntax error expecting FILE or TABLE. + 40 | MATCH FILES/KEEP=**. + | ^~~~" ]) AT_CLEANUP diff --git a/tests/language/commands/update.at b/tests/language/commands/update.at index e3590d2e71..66789c411d 100644 --- a/tests/language/commands/update.at +++ b/tests/language/commands/update.at @@ -118,7 +118,7 @@ AT_CHECK([pspp --testing-mode -O format=csv insert.sps], [1], [dnl 15 | UPDATE/FILE='x.sav'/FILE=*/RENAME(name=name2). | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" -"update.sps:16.8-16.12: error: UPDATE: Syntax error expecting BY, MAP, DROP, or KEEP. +"update.sps:16.8-16.12: error: UPDATE: Syntax error expecting FILE or TABLE. 16 | UPDATE/xyzzy. | ^~~~~" ]) -- 2.30.2