Gnumeric Reader: Fix memory leak
authorJohn Darrington <john@darrington.wattle.id.au>
Sun, 18 Oct 2015 11:14:47 +0000 (13:14 +0200)
committerJohn Darrington <john@darrington.wattle.id.au>
Sun, 18 Oct 2015 11:26:53 +0000 (13:26 +0200)
src/data/gnumeric-reader.c
src/data/ods-reader.c
src/data/spreadsheet-reader.h

index e0e95069b602fb38a3794ca2075d70ed50bf77b5..0783e10f7c1b33452222b82238d95d51ae582004 100644 (file)
@@ -189,6 +189,8 @@ gnumeric_unref (struct spreadsheet *s)
       free (r->sheets);
       state_data_destroy (&r->msd);
 
+      free (s->file_name);
+
       free (r);
     }
 }
@@ -555,7 +557,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro
     {
       r = xzalloc (sizeof *r);
       r->spreadsheet.n_sheets = -1;
-      r->spreadsheet.file_name = filename;
+      r->spreadsheet.file_name = strdup (filename);
       sd = &r->msd;
     }
   else
@@ -589,8 +591,7 @@ gnumeric_reopen (struct gnumeric_reader *r, const char *filename, bool show_erro
   if ( ret != 1)
     {
       /* Does not seem to be a gnumeric file */
-      xmlFreeTextReader (sd->xtr);
-      free (r);
+      gnumeric_unref (&r->spreadsheet);
       return NULL;
     }
 
index 68484ce664c1825afb27e395fed4f04bca92c81d..64ae8a6142e910935051fda76b70f636ce4c9c36 100644 (file)
@@ -173,6 +173,8 @@ ods_unref (struct spreadsheet *s)
        
       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:
index 314376379cbecf1a33bc3d0c3483688e287a54c7..c03cf71642135f0ef12331e247a4fe44d58fb9a7 100644 (file)
@@ -59,7 +59,7 @@ enum spreadsheet_type
 
 struct spreadsheet
 {
-  const char *file_name;
+  char *file_name;
 
   enum spreadsheet_type type;