summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Darrington <john@cellform.com>2025-12-31 10:01:37 +0100
committerJohn Darrington <john@cellform.com>2025-12-31 10:01:37 +0100
commit9877df0beb52f4d0b80476599c2651111bd91646 (patch)
treec7701fc997fcfeb1d371e5d20bbcfa2245569f95
parentb5a6a3c550a5f55029eb6f04bcbb0fa7556791d7 (diff)
Fix assertion when a LOOP has no END LOOPHEADmaster
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.c4
-rw-r--r--src/language/commands/value-labels.c2
-rw-r--r--tests/language/commands/loop.at23
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
Anonymization by Anonymouse.org ~ Adverts
Anonymouse better ad-free, faster and with encryption?
X