Fixed a bug apparent when using the FREQUENCIES command with the html driver
authorJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 Dec 2003 13:40:08 +0000 (13:40 +0000)
committerJohn Darrington <john@darrington.wattle.id.au>
Thu, 11 Dec 2003 13:40:08 +0000 (13:40 +0000)
src/ChangeLog
src/frequencies.q
src/html.c
src/som.c
src/str.c
src/tab.c
tests/Makefile.am
tests/bugs/html-frequency.sh [new file with mode: 0755]

index c3877c4ac5e588c8f52f8d77d22b1a82f5be3cdb..dca50453bdcb3a14b6b3f89c513a2486f41a52b0 100644 (file)
@@ -1,3 +1,10 @@
+
+Thu Dec 11 21:38:24 WST 2003 John Darrington <john@darrington.wattle.id.au>
+
+       * Fixed a bug apparent when using the FREQUENCIES command with the
+       html driver.  The html driver was incorrectly trying to display 
+       empty cells.
+
 Sun Jan  2 21:40:13 2000  Ben Pfaff  <blp@gnu.org>
 
        * Makefile.am: Reorganized.  Put locale dir in version.c instead
index d40267e26bac7b92d555f01625e749e6c746bd29..353c2be634a193bd4d3d41427b266694a8eca743 100644 (file)
@@ -192,8 +192,11 @@ cmd_frequencies (void)
   int_pool = pool_create ();
   result = internal_cmd_frequencies ();
   pool_destroy (int_pool);
+  int_pool=0;
   pool_destroy (gen_pool);
+  gen_pool=0;
   free (v_variables);
+  v_variables=0;
   return result;
 }
 
index c647f34b5726cd86f71281a6772118d38d962081..cb4ae056c4f64eb4463f66ece1da0720b1c9a82d 100644 (file)
@@ -556,18 +556,19 @@ output_tab_table (struct outp_driver *this, struct tab_table *t)
            strcpy (cp, ">");
            fputs (header, x->file.file);
            
-           {
-             char *s = ls_value (cc);
-             size_t l = ls_length (cc);
-
-             while (l && isspace ((unsigned char) *s))
-               {
-                 l--;
-                 s++;
-               }
+           if ( ! (*ct & TAB_EMPTY)  ) 
+             {
+               char *s = ls_value (cc);
+               size_t l = ls_length (cc);
+
+               while (l && isspace ((unsigned char) *s))
+                 {
+                   l--;
+                   s++;
+                 }
              
-             escape_string (x->file.file, s, l);
-           }
+               escape_string (x->file.file, s, l);
+             }
 
            fprintf (x->file.file, "</T%c>\n", tag);
          }
index dde12b5f3a4fbaa4a0380d754a9d6113fc43761a..2c527c65abed7422c279e9aeffc54b89618bdd54 100644 (file)
--- a/src/som.c
+++ b/src/som.c
@@ -64,10 +64,10 @@ som_blank_line (void)
 }
 \f
 /* Driver. */
-struct outp_driver *d;
+static struct outp_driver *d=0;
 
 /* Table. */
-struct som_table *t;
+static struct som_table *t=0;
 
 /* Flags. */
 static unsigned flags;
index 4bf2d60c67f1578629abe5cc56771b1d819b1b14..0a9d0d0f26d713fb64ce6de6b0e3f4cfa0a13377 100644 (file)
--- a/src/str.c
+++ b/src/str.c
@@ -331,7 +331,11 @@ ds_end (const struct string *st)
 void
 ds_concat (struct string *st, const char *s)
 {
-  size_t s_len = strlen (s);
+  size_t s_len;
+
+  if (!s) return;
+
+  s_len = strlen (s);
   ds_extend (st, st->length + s_len);
   strcpy (st->string + st->length, s);
   st->length += s_len;
index 412bb0ac5d0d8084660ce23dc88ae4930529ea17..7fdc37d24c94044a58e0c0e5eff51339b184c161 100644 (file)
--- a/src/tab.c
+++ b/src/tab.c
@@ -132,6 +132,7 @@ tab_destroy (struct tab_table *t)
 {
   assert (t != NULL);
   pool_destroy (t->container);
+  t->container=0;
 }
 
 /* Sets the width and height of a table, in columns and rows,
index 1109a24f5c23efe250366ce24c24b37403af7f35..652d517b14f9fa64c4bc24c04430cfb2ec623116 100644 (file)
@@ -3,7 +3,7 @@
 bench:
        make BENCHMARK=1 check
 
-TESTS = syntax
+TESTS = syntax bugs/double-frequency.sh bugs/html-frequency.sh
 
 noinst_PROGRAMS = gengarbage
 
diff --git a/tests/bugs/html-frequency.sh b/tests/bugs/html-frequency.sh
new file mode 100755 (executable)
index 0000000..9ef4a4a
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+# This program tests for a bug where pspp would crash 
+# when a FREQUENCIES command was used with the html 
+# driver.
+
+
+TEMPDIR=/tmp/pspp-tst-$$
+
+cleanup()
+{
+     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
+
+here=`pwd`;
+
+activity="create data"
+cat << EOF > $TEMPDIR/ff.stat 
+
+data list free /v1 v2.
+begin data.
+0 1
+2 3 
+4 5
+3 4
+end data.
+
+frequencies v1 v2.
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+cd $TEMPDIR
+
+activity="run data"
+$here/../src/pspp -o html $TEMPDIR/ff.stat
+if [ $? -ne 0 ] ; then fail ; fi
+
+
+pass;