re PR libfortran/27360 (Memory leaks when reading logicals)
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 30 Apr 2006 03:19:37 +0000 (03:19 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 30 Apr 2006 03:19:37 +0000 (03:19 +0000)
2006-04-29  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libgfortran/27360

* io/list_read.c (read_logical):  Free line_buffer and free saved.

From-SVN: r113388

libgfortran/ChangeLog
libgfortran/io/list_read.c

index c8ecbfcc07ec7a006cc1c8f6c4b5375525f9d955..90537156703670bdc29af997ad79934113c3b733 100644 (file)
@@ -1,3 +1,9 @@
+2006-04-29  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libgfortran/27360
+       
+       * io/list_read.c (read_logical):  Free line_buffer and free saved.
+
 2006-04-28  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 
        PR libgfortran/27304
index 0d1969b53484e0721361d59efb65237ceebc13b9..ab3965d5f5800c62842f9f8ebc0eb520901e55f5 100644 (file)
@@ -652,6 +652,7 @@ read_logical (st_parameter_dt *dtp, int length)
   dtp->u.p.item_count = 0;
   dtp->u.p.line_buffer_enabled = 0;
   set_integer ((int *) dtp->u.p.value, v, length);
+  free_line (dtp);
 
   return;
 
@@ -689,25 +690,27 @@ read_logical (st_parameter_dt *dtp, int length)
 
  bad_logical:
 
+  free_line (dtp);
+
   if (nml_bad_return (dtp, c))
     return;
 
   eat_line (dtp);
   free_saved (dtp);
-  if (dtp->u.p.line_buffer != NULL)
-    free_mem (dtp->u.p.line_buffer);
   st_sprintf (message, "Bad logical value while reading item %d",
              dtp->u.p.item_count);
   generate_error (&dtp->common, ERROR_READ_VALUE, message);
   return;
 
  logical_done:
-  
+
   dtp->u.p.item_count = 0;
   dtp->u.p.line_buffer_enabled = 0;
   dtp->u.p.saved_type = BT_LOGICAL;
   dtp->u.p.saved_length = length;
   set_integer ((int *) dtp->u.p.value, v, length);
+  free_saved (dtp);
+  free_line (dtp);
 }