diff options
| author | John Darrington <john@cellform.com> | 2025-12-31 10:01:37 +0100 |
|---|---|---|
| committer | John Darrington <john@cellform.com> | 2025-12-31 10:01:37 +0100 |
| commit | 9877df0beb52f4d0b80476599c2651111bd91646 (patch) | |
| tree | c7701fc997fcfeb1d371e5d20bbcfa2245569f95 | |
| parent | b5a6a3c550a5f55029eb6f04bcbb0fa7556791d7 (diff) | |
If LOOP was followed by NEW FILE, with no END LOOP, then
an assertion error would occur. This change fixes the
problem.
https://savannah.gnu.org/bugs/?67609
| -rw-r--r-- | src/data/dataset.c | 4 | ||||
| -rw-r--r-- | src/language/commands/value-labels.c | 2 | ||||
| -rw-r--r-- | tests/language/commands/loop.at | 23 |
3 files changed, 25 insertions, 4 deletions
diff --git a/src/data/dataset.c b/src/data/dataset.c index cdbf8a16d..24d4a98c2 100644 --- a/src/data/dataset.c +++ b/src/data/dataset.c @@ -826,8 +826,8 @@ proc_push_transformations (struct dataset *ds) void proc_pop_transformations (struct dataset *ds, struct trns_chain *chain) { - assert (ds->n_stack > 0); - *chain = ds->stack[--ds->n_stack]; + if (ds->n_stack > 0) + *chain = ds->stack[--ds->n_stack]; } bool diff --git a/src/language/commands/value-labels.c b/src/language/commands/value-labels.c index b8e619d89..18b7a4a72 100644 --- a/src/language/commands/value-labels.c +++ b/src/language/commands/value-labels.c @@ -63,7 +63,7 @@ cmd_add_value_labels (struct lexer *lexer, struct dataset *ds) static int do_value_labels (struct lexer *lexer, const struct dictionary *dict, bool erase) { - struct variable **vars; /* Variable list. */ + struct variable **vars = NULL; /* Variable list. */ size_t n_vars; /* Number of variables. */ int parse_err=0; /* true if error parsing variables */ diff --git a/tests/language/commands/loop.at b/tests/language/commands/loop.at index 50117daba..7974071ff 100644 --- a/tests/language/commands/loop.at +++ b/tests/language/commands/loop.at @@ -371,4 +371,25 @@ loop.sps:36.10: error: LOOP: Syntax error expecting end of command. error: LOOP: At end of input: Syntax error expecting END LOOP. ]) -AT_CLEANUP
\ No newline at end of file +AT_CLEANUP + + +AT_SETUP([LOOP without end]) + +AT_DATA([xloop.sps], [dnl +DATA LIST FREE / a. +LOOP b +BEGINefghi jk +NEW FILE. +VALUE LABELS p. +]) + +AT_CHECK([pspp -O format=csv xloop.sps],[1], +["xloop.sps:3.1-3.10: error: LOOP: Syntax error expecting `='. + 3 | BEGINefghi jk + | ^~~~~~~~~~" + +error: LOOP: At end of input: Syntax error expecting END LOOP. +]) + +AT_CLEANUP |
