FACTOR: Fix a crash when bad input was presented
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 May 2017 11:22:37 +0000 (13:22 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 May 2017 11:22:37 +0000 (13:22 +0200)
src/language/data-io/matrix-reader.c
tests/language/stats/factor.at

index 65e3cf4d08cd59219e65fec3211ec875c841c026..02970c994ec71facf88d38dedb606671bfd15d87 100644 (file)
@@ -86,8 +86,8 @@ struct matrix_reader
   gsl_matrix *mean_vectors;
   gsl_matrix *var_vectors;
 
-  gsl_matrix *correlation;
-  gsl_matrix *covariance;
+  //  gsl_matrix *correlation;
+  //  gsl_matrix *covariance;
 };
 
 struct matrix_reader *
@@ -251,22 +251,18 @@ next_matrix_from_reader (struct matrix_material *mm,
       if (mrow == -1)
        continue;
 
-
       if (0 == strncasecmp ((char *) value_str (uv, 8), "CORR    ", 8))
        {
-         matrix_fill_row (&mr->correlation, c, mrow, vars, n_vars);
+         matrix_fill_row (&mm->corr, c, mrow, vars, n_vars);
        }
       else if (0 == strncasecmp ((char *) value_str (uv, 8), "COV     ", 8))
        {
-         matrix_fill_row (&mr->covariance, c, mrow, vars, n_vars);
+         matrix_fill_row (&mm->cov, c, mrow, vars, n_vars);
        }
     }
 
   casereader_destroy (group);
 
-  mm->cov = mr->covariance;
-  mm->corr = mr->correlation;
-
   free (table);
 
   return true;
index 55c781c4fba3f59442c66a83d88ffc1718821936..0b4565632604f5c187f5d82fb13ef362fcfa6572 100644 (file)
@@ -2252,3 +2252,40 @@ bnt_actws_56,.562
 ])
 
 AT_CLEANUP
+
+
+
+
+
+
+AT_SETUP([FACTOR bad input])
+
+dnl Test for a crash 
+AT_DATA([bad-input.sps], [dnl
+set format = F10.3.
+MATRIX DATA VARIABLES S1 ROWTYPE_ V1 TO V3 /SPLIT=S1.
+BEGIN DATA
+0 MEAN 2 4 3
+0 SD 1 2 3
+0 N 9 9 9
+0 KORR 1
+0 CORV .6 1
+0 CORR .7 .8 1
+1 MEAN 9 8 7
+1 SD 5 6 7
+1 N 9 9 9
+1 CORR 1
+X CORR .4 1
+1 CORR .3 .2 1
+END DATA.
+
+EXECUTE.
+
+FACTOR MATRIX IN (CORR =!*)
+       /PRINT = CORRELATION
+       .
+])
+
+AT_CHECK([pspp -O format=csv bad-input.sps], [1], [ignore])
+
+AT_CLEANUP