frequencies: fixed bug #48128 in percentiles
authorFriedrich Beckmann <friedrich.beckmann@gmx.de>
Sat, 4 Jun 2016 22:41:05 +0000 (00:41 +0200)
committerFriedrich Beckmann <friedrich.beckmann@gmx.de>
Sat, 4 Jun 2016 22:46:18 +0000 (00:46 +0200)
The frequencies command crashed with a certain combination of
percentiles and histogram options. The bug was reported by
Cubyrk Zyrvay in
http://lists.gnu.org/archive/html/bug-gnu-pspp/2016-06/msg00000.html

Closes bug #48128

src/language/stats/frequencies.c

index 34da71c8aaf00b776d0c6a77731b077b310f5c0b..675a02319aaebf1ca6f8d3b91cb323106eb1e929 100644 (file)
@@ -1124,6 +1124,7 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds)
        frq.percentiles[frq.n_percentiles].show = true;
 
        frq.n_percentiles++;
+        frq.n_show_percentiles++;
     }
 
 
@@ -1212,19 +1213,20 @@ cmd_frequencies (struct lexer *lexer, struct dataset *ds)
     frq.n_show_percentiles = 0;
     for (i = o = 0; i < frq.n_percentiles; ++i)
       {
-       frq.percentiles[o].p = frq.percentiles[i].p;
-
-       if (frq.percentiles[i].show)
-         frq.percentiles[o].show = true;
-
-       if (frq.percentiles[i].p != previous_p)
-         {
-           if (frq.percentiles[i].show)
-             frq.n_show_percentiles++;
-
-           o++;
-         }
-
+        if (frq.percentiles[i].p != previous_p)
+          {
+            frq.percentiles[o].p = frq.percentiles[i].p;
+            frq.percentiles[o].show = frq.percentiles[i].show;
+            if (frq.percentiles[i].show)
+              frq.n_show_percentiles++;
+            o++;
+          }
+        else if (frq.percentiles[i].show &&
+                 !frq.percentiles[o].show)
+          {
+            frq.percentiles[o].show = true;
+            frq.n_show_percentiles++;
+          }
        previous_p = frq.percentiles[i].p;
       }