spreadsheet: Avoid sharing a dictionary between spreadsheet and client.
[pspp] / src / data / ods-reader.c
index 01ff6cf115d82dc0b2861814308025f93bf814ca..2f058b044d8ac8892115ff53b498a96e7f8c78bf 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPP - a program for statistical analysis.
-   Copyright (C) 2011, 2012, 2013 Free Software Foundation, Inc.
+   Copyright (C) 2011, 2012, 2013, 2016 Free Software Foundation, Inc.
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -170,10 +170,12 @@ ods_unref (struct spreadsheet *s)
        {
          xmlFree (r->sheets[i].name);
        }
-       
+
+      dict_destroy (r->dict);
+
       zip_reader_destroy (r->zreader);
       free (r->sheets);
-       
+      free (s->file_name);
       free (r);
     }
 }
@@ -650,7 +652,7 @@ ods_probe (const char *filename, bool report_errors)
   r->n_allocated_sheets = 0;
   r->sheets = NULL;
 
-  r->spreadsheet.file_name = filename;
+  r->spreadsheet.file_name = strdup (filename);
   return &r->spreadsheet;
 
  error:
@@ -919,8 +921,6 @@ ods_make_reader (struct spreadsheet *spreadsheet,
 
   free (var_spec);
 
-  dict_destroy (r->spreadsheet.dict);
-  r->spreadsheet.dict = NULL;
   ods_file_casereader_destroy (NULL, r);
 
   return NULL;
@@ -1014,6 +1014,9 @@ ods_file_casereader_read (struct casereader *reader UNUSED, void *r_)
        break;
     }
 
+  xmlFree (type);
+  xmlFree (val_string);
+  
   return c;
 }
 #endif