Fix incorrectly ordered arguments to xcalloc
authorJohn Darrington <john@darrington.wattle.id.au>
Fri, 7 Oct 2011 12:15:35 +0000 (14:15 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Fri, 7 Oct 2011 12:15:35 +0000 (14:15 +0200)
The gnulib xcalloc call has the following signature:
 void *calloc(size_t N, size_t S);
where N is the number of objects and S is the size of each object.
In many places, we had these arguments transposed. In many implementations
this doesn't matter since the two arguments are simply multiplied together.
However, on some systems this can cause problems (ie crash), if S is zero.
This change fixes all calls where the size was being passes as the first
argument instead of the second.

13 files changed:
src/language/stats/ks-one-sample.c
src/language/stats/mcnemar.c
src/language/stats/sign.c
src/language/stats/t-test-indep.c
src/language/stats/t-test-parser.c
src/language/stats/wilcoxon.c
src/math/covariance.c
src/math/percentiles.c
src/math/trimmed-mean.c
src/math/tukey-hinges.c
src/math/wilcoxon-sig.c
src/ui/gui/psppire-scanf.c
src/ui/gui/widget-io.c

index a4a2792f7eb0fd1b4ec2225de16bd76ac7b6aa5f..aaab53fa891a4e09b11b56b2a453a823547ab682 100644 (file)
@@ -145,7 +145,7 @@ ks_one_sample_execute (const struct dataset *ds,
   int v;
   struct casereader *r = casereader_clone (input);
 
-  struct ks *ks = xcalloc (sizeof *ks, ost->n_vars);
+  struct ks *ks = xcalloc (ost->n_vars, sizeof *ks);
 
   for (v = 0; v < ost->n_vars; ++v)
     {
index 53e9a52f526041b91fbf5621478fcd8f502a7927..e26a3c1d0954f9632fb58c913fc2bf00107d74e9 100644 (file)
@@ -82,7 +82,7 @@ mcnemar_execute (const struct dataset *ds,
   
   struct casereader *r = input;
 
-  struct mcnemar *mc = xcalloc (sizeof *mc, t2s->n_pairs);
+  struct mcnemar *mc = xcalloc (t2s->n_pairs, sizeof *mc);
 
   for (i = 0 ; i < t2s->n_pairs; ++i )
     {
index 0048eb3e5a810ee867cc485008ab5b9151fb3111..e208ce9d9e2dc6d6d781c297a21360a314405103 100644 (file)
@@ -174,7 +174,7 @@ sign_execute (const struct dataset *ds,
   const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent);
   struct ccase *c;
 
-  struct sign_test_params *stp = xcalloc (sizeof *stp, t2s->n_pairs);
+  struct sign_test_params *stp = xcalloc (t2s->n_pairs, sizeof *stp);
 
   struct casereader *r = input;
 
index bc42e3270f102a1064fe0feca7a0f351b4a436f6..c80505493964775c45e9efc66d9db25899ee679f 100644 (file)
@@ -82,7 +82,7 @@ indep_run (struct tt *tt, const struct variable *gvar,
   struct ccase *c;
   struct casereader *r;
 
-  struct pair_stats *ps = xcalloc (sizeof (*ps), tt->n_vars);
+  struct pair_stats *ps = xcalloc (tt->n_vars, sizeof *ps);
 
   int v;
 
index efb84b32225de0c728001215067f19ee538576c3..089d0dd8a691db2d76c636afe91969ca95c16ce2 100644 (file)
@@ -178,8 +178,7 @@ cmd_t_test (struct lexer *lexer, struct dataset *ds)
            else
              n_pairs = n_v1 * n_v2;
          
-           pairs = xcalloc (sizeof *pairs, n_pairs);
-
+           pairs = xcalloc (n_pairs, sizeof *pairs);
 
            if ( with)
              {
index ed6225df6cee329ab33be3f737829e5ab9bf3f1d..5b09f6e1ddf04093315430c0e1a29cefd64cb3c9 100644 (file)
@@ -81,7 +81,7 @@ wilcoxon_execute (const struct dataset *ds,
   const struct dictionary *dict = dataset_dict (ds);
   const struct two_sample_test *t2s = UP_CAST (test, const struct two_sample_test, parent);
 
-  struct wilcoxon_state *ws = xcalloc (sizeof (*ws), t2s->n_pairs);
+  struct wilcoxon_state *ws = xcalloc (t2s->n_pairs, sizeof *ws);
   const struct variable *weight = dict_get_weight (dict);
   struct variable *weightx = dict_create_internal_var (WEIGHT_IDX, 0);
   struct caseproto *proto;
index aa4a4b8ac0358982dbdf13691a4c495d20d6e473..be53672d709fe5ed419d1c76361c1bb8450ea10d 100644 (file)
@@ -160,8 +160,8 @@ covariance_1pass_create (size_t n_vars, const struct variable *const *vars,
 
   cov->n_cm = (n_vars * (n_vars - 1)  ) / 2;
 
-  if (cov->n_cm > 0)
-    cov->cm = xcalloc (sizeof *cov->cm, cov->n_cm);
+
+  cov->cm = xcalloc (cov->n_cm, sizeof *cov->cm);
   cov->categoricals = NULL;
 
   return cov;
index ed7b129576f1f7d6b713f46af75ef77aeab3dbf8..2063dd2c6549a2fe3c5cc06039a4986d0a1f86c8 100644 (file)
@@ -176,7 +176,7 @@ percentile_create (double p, double W)
   ptl->w = W;
 
   os->n_k = 2;
-  os->k = xcalloc (sizeof (*os->k), 2);
+  os->k = xcalloc (2, sizeof (*os->k));
   os->k[0].tc = W * p;
   os->k[1].tc = (W + 1.0) * p;
 
index 5e48689626817ddf59ad46363a17e1d0e763084d..b985125295f9754d1ffec7c6b751c02e08425516 100644 (file)
@@ -57,7 +57,7 @@ trimmed_mean_create (double W, double tail)
   struct statistic *stat = &os->parent;
 
   os->n_k = 2;
-  os->k = xcalloc (sizeof (*os->k), 2);
+  os->k = xcalloc (2, sizeof (*os->k));
 
   assert (tail >= 0);
   assert (tail <= 1);
index 3e9ea9374eb4198b76d83688234b23de97fc7cf9..99a42cdac8be36e24f44eeea816ebd8e9944493e 100644 (file)
@@ -81,7 +81,7 @@ tukey_hinges_create (double W, double c_min)
   assert (c_min >= 0);
 
   os->n_k = 3;
-  os->k = xcalloc (sizeof (*os->k), 3);
+  os->k = xcalloc (3, sizeof (*os->k));
 
   if ( c_min >= 1.0)
     {
index d9a4bcae43d0020474cedb02ad60985f218ff5a4..a1b43dae506429f70833ddb2c9ae53f3356c707c 100644 (file)
@@ -105,7 +105,7 @@ count_sums_to_W (unsigned long int n, unsigned long int w)
   else if (n == 1)
     return 1;
 
-  array = xcalloc (sizeof *array, w + 1);
+  array = xcalloc (w + 1, sizeof *array);
   array[w] = 1;
 
   max = w;
index 2396245af7357005b9da109802c379c115815552..c2c8e55ade92df8cbf874e3733ad33c574ff73e0 100644 (file)
@@ -93,7 +93,7 @@ guts (PsppireScanf *scanf)
   g_return_if_fail (0 == printf_parse (scanf->format, &scanf->d, &a));
 
   if ( scanf->d.count > 0)
-    scanf->widgets = xcalloc (sizeof (*scanf->widgets), scanf->d.count);
+    scanf->widgets = xcalloc (scanf->d.count, sizeof (*scanf->widgets));
 
   /* A is not used, so get rid of it */
   if (a.arg != a.direct_alloc_arg)
index e04e32222d85cdc50f4052463f44191ffc8f2824..da9c9cb1e868f7469c152a62307790779a5829d3 100644 (file)
@@ -51,7 +51,7 @@ widget_printf (const gchar *fmt, ...)
   if ( 0 !=  printf_parse (fmt, &d, &a) )
     return NULL;
 
-  widgets = xcalloc (sizeof (*widgets), d.count);
+  widgets = xcalloc (d.count, sizeof (*widgets));
   va_start (ap, fmt);
   for (i = 0 ; i < d.count ; ++i )
     {