perl-module: Init and destroy for long strings in set_missing_values().
authorBen Pfaff <blp@cs.stanford.edu>
Sun, 21 Jul 2019 18:27:19 +0000 (11:27 -0700)
committerBen Pfaff <blp@cs.stanford.edu>
Sun, 21 Jul 2019 18:41:38 +0000 (11:41 -0700)
Otherwise long strings segfault.

perl-module/PSPP.xs

index f6655b8ded0dbf8d24266a47c3cf6858e4244822..c563b40f6330785c48f42d1efa30749b8d4345a1 100644 (file)
@@ -412,12 +412,15 @@ INIT:
   croak ("No more than 3 missing values are permitted");
 
  for (i = 0; i < items - 1; ++i)
-   scalar_to_value (&val[i], ST(i+1), var);
+   make_value_from_scalar (&val[i], ST(i+1), var);
 CODE:
  struct missing_values mv;
  mv_init (&mv, var_get_width (var));
  for (i = 0 ; i < items - 1; ++i )
-   mv_add_value (&mv, &val[i]);
+   {
+     mv_add_value (&mv, &val[i]);
+     value_destroy (&val[i], var_get_width (var));
+   }
  var_set_missing_values (var, &mv);