From: John Darrington Date: Fri, 8 May 2009 10:56:36 +0000 (+0800) Subject: Fixed crash calculating trimmed mean with missing values. X-Git-Tag: v0.7.3~131 X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=85e74b3e36d5673205cb64345bca2587889f2113;p=pspp-builds.git Fixed crash calculating trimmed mean with missing values. Closes bug #26404 --- diff --git a/src/language/stats/examine.q b/src/language/stats/examine.q index 51f28320..3d0b077c 100644 --- a/src/language/stats/examine.q +++ b/src/language/stats/examine.q @@ -1005,8 +1005,8 @@ examine_group (struct cmd_examine *cmd, struct casereader *reader, int level, metric->quartiles[2] = metric->ptl[i]; } - metric->tukey_hinges = tukey_hinges_create (metric->n, metric->cmin); - metric->trimmed_mean = trimmed_mean_create (metric->n, 0.05); + metric->tukey_hinges = tukey_hinges_create (metric->n_valid, metric->cmin); + metric->trimmed_mean = trimmed_mean_create (metric->n_valid, 0.05); n_os = metric->n_ptiles + 2; diff --git a/tests/automake.mk b/tests/automake.mk index 2384f9d6..1e3b3a97 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -118,6 +118,7 @@ dist_TESTS = \ tests/bugs/get.sh \ tests/bugs/examine-crash.sh \ tests/bugs/examine-crash2.sh \ + tests/bugs/examine-crash3.sh \ tests/bugs/examine-1sample.sh \ tests/bugs/examine-missing.sh \ tests/bugs/examine-missing2.sh \ diff --git a/tests/bugs/examine-crash3.sh b/tests/bugs/examine-crash3.sh new file mode 100755 index 00000000..6093c343 --- /dev/null +++ b/tests/bugs/examine-crash3.sh @@ -0,0 +1,82 @@ +#!/bin/sh + +# This program tests for a bug which crashed pspp +# when the /DESCRIPTIVES subcommand of EXAMINE +# encountered missing values. + +TEMPDIR=/tmp/pspp-tst-$$ +TESTFILE=$TEMPDIR/`basename $0`.sps + +# ensure that top_srcdir and top_builddir are absolute +if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi +if [ -z "$top_builddir" ] ; then top_builddir=. ; fi +top_srcdir=`cd $top_srcdir; pwd` +top_builddir=`cd $top_builddir; pwd` + +PSPP=$top_builddir/src/ui/terminal/pspp + +STAT_CONFIG_PATH=$top_srcdir/config +export STAT_CONFIG_PATH + +LANG=C +export LANG + + +cleanup() +{ + if [ x"$PSPP_TEST_NO_CLEANUP" != x ] ; then + echo "NOT cleaning $TEMPDIR" + return ; + fi + rm -rf $TEMPDIR +} + + +fail() +{ + echo $activity + echo FAILED + cleanup; + exit 1; +} + + +no_result() +{ + echo $activity + echo NO RESULT; + cleanup; + exit 2; +} + +pass() +{ + cleanup; + exit 0; +} + +mkdir -p $TEMPDIR + +cd $TEMPDIR + +activity="create program" +cat < $TESTFILE +data list list /x * y *. +begin data. +1 0 +2 0 +. 0 +3 1 +4 1 +end data. +examine x by y /statistics=descriptives. +EOF +if [ $? -ne 0 ] ; then no_result ; fi + + +activity="run program" +$SUPERVISOR $PSPP --testing-mode -o raw-ascii $TESTFILE +if [ $? -ne 0 ] ; then fail ; fi + + +pass;