texinfo-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[8106] parsetexi valgrind fixes


From: gavinsmith0123
Subject: [8106] parsetexi valgrind fixes
Date: Sat, 18 Aug 2018 11:30:59 -0400 (EDT)

Revision: 8106
          http://svn.sv.gnu.org/viewvc/?view=rev&root=texinfo&revision=8106
Author:   gavin
Date:     2018-08-18 11:30:58 -0400 (Sat, 18 Aug 2018)
Log Message:
-----------
parsetexi valgrind fixes

Modified Paths:
--------------
    trunk/tp/Texinfo/XS/parsetexi/convert.c
    trunk/tp/Texinfo/XS/parsetexi/end_line.c
    trunk/tp/Texinfo/XS/parsetexi/separator.c
    trunk/tp/Texinfo/XS/parsetexi/tree.c

Modified: trunk/tp/Texinfo/XS/parsetexi/convert.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/convert.c     2018-08-18 14:27:06 UTC (rev 
8105)
+++ trunk/tp/Texinfo/XS/parsetexi/convert.c     2018-08-18 15:30:58 UTC (rev 
8106)
@@ -184,7 +184,7 @@
   TEXT result;
 
   if (!e)
-    return "";
+    return strdup ("");
   text_init (&result);
   convert_to_texinfo_internal (e, &result);
   return result.text;

Modified: trunk/tp/Texinfo/XS/parsetexi/end_line.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 14:27:06 UTC (rev 
8105)
+++ trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 15:30:58 UTC (rev 
8106)
@@ -1043,7 +1043,7 @@
           destroy_element (type_contents);
         }
     }
-  eft->normalized = "";
+  eft->normalized = strdup ("");
   add_extra_float_type (current, "type", eft);
   return 0;
 }
@@ -1185,11 +1185,9 @@
       && current->args.list[0]->contents.list[0]->type
          == ET_empty_line_after_command)
     {
-      ELEMENT *e;
-      e = current->args.list[0]->contents.list[0];
+      ELEMENT *e = remove_from_contents (current->args.list[0], 0);
       insert_into_contents (current, e, 0);
-      // TODO: Free lists?
-      current->args.number = 0;
+      destroy_element (pop_element_from_args (current));
     }
   remove_empty_content_arguments (current);
 

Modified: trunk/tp/Texinfo/XS/parsetexi/separator.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 14:27:06 UTC (rev 
8105)
+++ trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 15:30:58 UTC (rev 
8106)
@@ -649,7 +649,11 @@
 
   while (k->value->contents.number > 0
          && !last_contents_child(k->value)) // ->contents.number == 0)
-    pop_element_from_contents (k->value);
+    {
+      ELEMENT *popped = pop_element_from_contents (k->value);
+      if (popped)
+        destroy_element (popped);
+    }
 
   if (k->value->contents.number == 0)
     {

Modified: trunk/tp/Texinfo/XS/parsetexi/tree.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 14:27:06 UTC (rev 
8105)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 15:30:58 UTC (rev 
8106)
@@ -94,7 +94,27 @@
               free_node_contents (nse->manual_content);
               free_node_contents (nse->node_content);
               free (nse);
+              break;
             }
+        case extra_float_type:
+          {
+            EXTRA_FLOAT_TYPE *eft = (EXTRA_FLOAT_TYPE *) e->extra[i].value;
+            free (eft->normalized);
+
+            if (eft->content)
+              destroy_element (eft->content);
+            /* free_node_contents (eft->content); */
+            /* Big problem here.  If we call free_node_contents to look for
+               'route_not_in_tree' elements, the elements that *were* in
+               the tree may have already been freed via reset_parser.  I don't 
+               expect there to be 'route_not_in_tree' elements for 
+               EXTRA_FLOAT_TYPE; however, it's a potential problem for 
+               extra_node_spec above.  The best solution would seem to get rid 
+               of the need for any 'route_not_in_tree' elements. */
+
+            free (eft);
+            break;
+          }
         default:
           /* TODO: need to check if the element is in the main tree or not. */
           break;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]