From 3d2d152d74ea2ee4b1daa53824ecdac173410719 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 11 Mar 2013 22:08:34 -0700 Subject: [PATCH] RANK: Fix crash ranking multiple variables without any rank specs. Incidentally fixes a small memory leak in the same situation. Bug #38482. Reported by John Darrington. --- src/language/stats/rank.c | 4 ++-- tests/language/stats/rank.at | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/src/language/stats/rank.c b/src/language/stats/rank.c index 5f5591adb9..a29a3fd11f 100644 --- a/src/language/stats/rank.c +++ b/src/language/stats/rank.c @@ -784,8 +784,8 @@ cmd_rank (struct lexer *lexer, struct dataset *ds) rs = pool_calloc (rank.pool, 1, sizeof *rs); rs->rfunc = RANK; - rs->dest_names = pool_calloc (rank.pool, 1, sizeof *rs->dest_names); - rs->dest_labels = pool_calloc (rank.pool, 1, sizeof *rs->dest_labels); + rs->dest_names = pool_calloc (rank.pool, rank.n_vars, + sizeof *rs->dest_names); rank.rs = rs; rank.n_rs = 1; diff --git a/tests/language/stats/rank.at b/tests/language/stats/rank.at index 45ca41aea0..f47d23e861 100644 --- a/tests/language/stats/rank.at +++ b/tests/language/stats/rank.at @@ -37,6 +37,40 @@ x,Rx ]) AT_CLEANUP +# This checks for regression against a crash reported as bug #38482 +# that occurred when multiple variables were specified without any +# rank specifications. +AT_SETUP([RANK multiple variables with defaults]) +AT_DATA([rank.sps], [dnl +DATA LIST LIST NOTABLE /x * y * z *. +BEGIN DATA. + 1.00 2.00 3.00 + 4.00 5.00 6.00 +END DATA. + +RANK ALL. + +LIST. +]) +AT_CHECK([pspp -o pspp.csv rank.sps]) +AT_CHECK([cat pspp.csv], [0], [dnl +Variables Created By RANK + + + +x into Rx(RANK of x) + +y into Ry(RANK of y) + +z into Rz(RANK of z) + +Table: Data List +x,y,z,Rx,Ry,Rz +1.00,2.00,3.00,1.000,1.000,1.000 +4.00,5.00,6.00,2.000,2.000,2.000 +]) +AT_CLEANUP + AT_SETUP([RANK with RANK, RFRACTION, N]) AT_DATA([rank.sps], [dnl DATA LIST LIST NOTABLE /a * b *. -- 2.30.2