(map_case): Create destination case instead of leaving it
authorBen Pfaff <blp@gnu.org>
Thu, 12 Jul 2007 04:30:11 +0000 (04:30 +0000)
committerBen Pfaff <blp@gnu.org>
Thu, 12 Jul 2007 04:30:11 +0000 (04:30 +0000)
undefined.  Fixes bug #20285.
Reviewed by John Darrington.

src/language/data-io/ChangeLog
src/language/data-io/get.c
src/libpspp/ChangeLog
tests/automake.mk
tests/bugs/case-map.sh [new file with mode: 0755]

index f22711cefe21b99f617c2a651620d36b8a4ab78a..ef3235121892c74fe1f4256478620d7aebf924c5 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-11  Ben Pfaff  <blp@gnu.org>
+
+       * get.c (map_case): Create destination case instead of leaving it
+       undefined.  Fixes bug #20285.
+       Reviewed by John Darrington.
+
 2007-06-06  Ben Pfaff  <blp@gnu.org>
 
        * get.c: Essentially rewrite MATCH FILES to support FIRST and
index 4665c6fbae60cece88904ee4ebd2ae650df9b99e..dbda3662372b9a8a3f3d016a119a7fbab84c0988 100644 (file)
@@ -1423,6 +1423,7 @@ map_case (const struct case_map *map,
 {
   size_t dst_idx;
 
+  case_create (dst, map->value_cnt);
   for (dst_idx = 0; dst_idx < map->value_cnt; dst_idx++)
     {
       int src_idx = map->map[dst_idx];
index e92778cb3d0187b902e7fbd0fac6b2c6da4b9a62..8c8e30c221b2dc5c398415ad53693caa6156bc69 100644 (file)
@@ -1,3 +1,8 @@
+2007-07-06  Ben Pfaff  <blp@gnu.org>
+
+       * copyleft.c (legal): Update startup notice to use format
+       recommended by latest GNU coding standards.
+
 2007-06-06  Ben Pfaff  <blp@gnu.org>
 
        * array.c (binary_search): Fix assertion.
index aead28ae8f7ac7df9d45377df0a95f8a06736d22..a67be09c553bb0b3b4dafbad4c1002836ab446a5 100644 (file)
@@ -81,6 +81,7 @@ dist_TESTS = \
        tests/bugs/alpha-freq.sh \
        tests/bugs/big-input.sh \
        tests/bugs/big-input-2.sh \
+       tests/bugs/case-map.sh \
        tests/bugs/comment-at-eof.sh \
        tests/bugs/compute-fmt.sh \
        tests/bugs/compression.sh \
diff --git a/tests/bugs/case-map.sh b/tests/bugs/case-map.sh
new file mode 100755 (executable)
index 0000000..479aea9
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# This program tests for a bug which caused a crash when
+# a non-empty case_map was created in SAVE.
+
+
+TEMPDIR=/tmp/pspp-tst-$$
+TESTFILE=$TEMPDIR/`basename $0`.sps
+
+# ensure that top_builddir  are absolute
+if [ -z "$top_builddir" ] ; then top_builddir=. ; fi
+if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi
+top_builddir=`cd $top_builddir; pwd`
+PSPP=$top_builddir/src/ui/terminal/pspp
+
+# ensure that top_srcdir is absolute
+top_srcdir=`cd $top_srcdir; pwd`
+
+STAT_CONFIG_PATH=$top_srcdir/config
+export STAT_CONFIG_PATH
+
+
+cleanup()
+{
+     cd /
+     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 > $TEMPDIR/foo.sps <<EOF
+INPUT PROGRAM.
+    COMPUTE #I = 1.
+    COMPUTE X = #I.
+    END CASE.
+    END FILE.
+END INPUT PROGRAM.
+
+SAVE OUTFILE='tiny.sav'.
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+activity="run program"
+$SUPERVISOR $PSPP -o raw-ascii -e /dev/null $TEMPDIR/foo.sps
+if [ $? -ne 0 ] ; then fail ; fi
+
+pass;