dataset: Before deleting variables, make sure new values are added.
authorBen Pfaff <blp@cs.stanford.edu>
Sat, 4 Mar 2023 00:43:59 +0000 (16:43 -0800)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 5 Mar 2023 19:22:47 +0000 (11:22 -0800)
This fixes a crash reported privately by knassen(at)chartermi.net.

src/data/dataset.c
tests/language/commands/delete-variables.at

index 6ade4b24c997be69acc68b7e07994a2ca0014fbf..9503521207c0fd78a5bbbc2fc18a9c55a579da53 100644 (file)
@@ -354,6 +354,12 @@ dataset_delete_vars (struct dataset *ds, struct variable **vars, size_t n)
   assert (!proc_has_transformations (ds));
   assert (n < dict_get_n_vars (ds->dict));
 
+  caseinit_mark_for_init (ds->caseinit, ds->dict);
+  ds->source = caseinit_translate_casereader_to_init_vars (
+    ds->caseinit, dict_get_proto (ds->dict), ds->source);
+  caseinit_clear (ds->caseinit);
+  caseinit_mark_as_preinited (ds->caseinit, ds->dict);
+
   dict_delete_vars (ds->dict, vars, n);
   ds->source = case_map_create_input_translator (
     case_map_to_compact_dict (ds->dict, 0), ds->source);
index 172e37b69c98cef175cfeb14138be908549d1cce..a679c21fee3732ac9b8b11e63ce38fc87c3e60a5 100644 (file)
@@ -87,6 +87,25 @@ ID,respondent_city_of_birth,respondent_name,respondent_year_of_birth,varlist
 ])
 AT_CLEANUP
 
+dnl Checks for regression against a crash reported privately by
+dnl knassen(at)chartermi.net on March 1, 2023.
+AT_SETUP([DELETE VARIABLES crash 2])
+AT_DATA([delete-variables.sps], [dnl
+DATA LIST LIST NOTABLE /foo (A5).
+STRING bar (A8).
+DELETE VARIABLES foo.
+LIST.
+BEGIN DATA.
+asdf
+END DATA.
+])
+AT_CHECK([pspp -O format=csv delete-variables.sps], [0], [dnl
+Table: Data List
+bar
+
+])
+AT_CLEANUP
+
 AT_SETUP([DELETE VARIABLES syntax errors])
 AT_DATA([delete-variables.sps], [dnl
 DATA LIST LIST NOTABLE /x y z.