Fix memory fault reading ODS file.
authorJohn Darrington <john@darrington.wattle.id.au>
Mon, 17 Feb 2014 19:36:00 +0000 (20:36 +0100)
committerJohn Darrington <john@darrington.wattle.id.au>
Mon, 17 Feb 2014 20:11:05 +0000 (21:11 +0100)
Partial fix for bug #41620

src/data/ods-reader.c
tests/automake.mk
tests/language/data-io/get-data-spreadsheet.at
tests/language/data-io/newone.ods [new file with mode: 0644]

index 8504c14cca545033de0d074a29f45659c47258c0..1b828d1e36a186a9e532c4c88871881e347d23a6 100644 (file)
@@ -986,8 +986,9 @@ ods_file_casereader_read (struct casereader *reader UNUSED, void *r_)
          struct xml_value *xmv = xzalloc (sizeof *xmv);
          xmv->text = xmlTextReaderValue (r->rsd.xtr);
          xmv->value = val_string;       
-         xmv->type = type;
          val_string = NULL;
+         xmv->type = type;
+         type = NULL;
 
          for (col = 0; col < r->rsd.col_span; ++col)
            {
index de2425f8afa8b9cad624a4c7899c22ce4b63adf8..31bf0b20339228e5e4344ae3086a2780a1be7ee1 100644 (file)
@@ -226,8 +226,9 @@ EXTRA_DIST += \
        tests/data/num-out.expected.cmp.gz \
        tests/data/v13.sav \
        tests/data/v14.sav \
-        tests/language/data-io/Book1.gnm.unzipped \
-        tests/language/data-io/test.ods
+       tests/language/data-io/Book1.gnm.unzipped \
+       tests/language/data-io/test.ods \
+       tests/language/data-io/newone.ods
 
 CLEANFILES += *.save pspp.* foo*
 \f
index 5d5a064a27d9f5a82ef7c5adfb6645b06a45a8c9..78ae754c8cc22e0172a2b757cd120686f87aa244 100644 (file)
@@ -398,3 +398,19 @@ AT_BANNER([GET DATA Spreadsheet /TYPE=ODS])
 
 CHECK_SPREADSHEET_READER([ODS])
 
+
+AT_SETUP([GET DATA /TYPE=ODS crash])
+AT_SKIP_IF([test n$ODF_READ_SUPPORT != nyes])
+
+                    
+AT_CHECK([cp $top_srcdir/tests/language/data-io/newone.ods this.ods])dnl
+
+AT_DATA([crash.sps],[dnl
+GET DATA /TYPE=ODS /FILE='this.ods' /CELLRANGE=RANGE 'A1:C8'  /READNAMES=ON
+LIST.
+])
+
+AT_CHECK([pspp -O format=csv crash.sps], [0], [ignore])
+
+AT_CLEANUP
+
diff --git a/tests/language/data-io/newone.ods b/tests/language/data-io/newone.ods
new file mode 100644 (file)
index 0000000..11926c4
Binary files /dev/null and b/tests/language/data-io/newone.ods differ