texinfo-commits
[Top][All Lists]
Advanced

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

[8105] parsetexi valgrind fixes


From: gavinsmith0123
Subject: [8105] parsetexi valgrind fixes
Date: Sat, 18 Aug 2018 10:27:06 -0400 (EDT)

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

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

Modified: trunk/tp/Texinfo/XS/parsetexi/end_line.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/end_line.c    2018-08-18 14:27:06 UTC (rev 
8105)
@@ -1152,7 +1152,9 @@
               float_label = parse_node_manual (args_child_by_index (f, 1));
               check_internal_node (float_label);
 
-              register_label (f, float_label);
+              register_label (f, float_label->node_content);
+              free_node_contents (float_label->manual_content);
+              free (float_label);
             }
           parse_float_type (f);
           k = lookup_extra_key (f, "type");
@@ -1800,7 +1802,7 @@
         {
           add_extra_contents (current, "node_content",
                               nodes_manuals[0]->node_content);
-          register_label (current, nodes_manuals[0]);
+          register_label (current, nodes_manuals[0]->node_content);
         }
 
       current_node = current;

Modified: trunk/tp/Texinfo/XS/parsetexi/labels.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/labels.c      2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/labels.c      2018-08-18 14:27:06 UTC (rev 
8105)
@@ -29,7 +29,7 @@
    and must be unique in the document.  Corresponds to @node, @anchor, and 
    second arg of @float. */
 void
-register_label (ELEMENT *current, NODE_SPEC_EXTRA *label)
+register_label (ELEMENT *current, ELEMENT *label)
 {
   if (labels_number == labels_space)
     {
@@ -41,8 +41,8 @@
     }
   labels_list[labels_number++].target = current;
 
-  if (label->node_content)
-    add_extra_contents (current, "node_content", label->node_content);
+  if (label)
+    add_extra_contents (current, "node_content", label);
 }
 
 void

Modified: trunk/tp/Texinfo/XS/parsetexi/labels.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/labels.h      2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/labels.h      2018-08-18 14:27:06 UTC (rev 
8105)
@@ -25,7 +25,7 @@
 
 extern LABEL *labels_list;
 extern size_t labels_number;
-void register_label (ELEMENT *current, NODE_SPEC_EXTRA *label);
+void register_label (ELEMENT *current, ELEMENT *label);
 void reset_labels (void);
 
 

Modified: trunk/tp/Texinfo/XS/parsetexi/separator.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/separator.c   2018-08-18 14:27:06 UTC (rev 
8105)
@@ -334,10 +334,12 @@
           parsed_anchor = parse_node_manual (current);
           if (check_node_label (parsed_anchor, CM_anchor))
             {
-              register_label (current->parent, parsed_anchor);
+              register_label (current->parent, parsed_anchor->node_content);
               if (current_region ())
                 add_extra_element (current, "region", current_region ());
+              free_node_contents (parsed_anchor->manual_content);
             }
+          free (parsed_anchor);
         }
       else if (command_data(closed_command).flags & CF_ref) // 5062
         {
@@ -368,7 +370,11 @@
                   if (nse && (nse->manual_content || nse->node_content))
                     add_extra_node_spec (ref, "node_argument", nse);
                   else
-                    free (nse);
+                    {
+                      free_node_contents (nse->manual_content);
+                      free_node_contents (nse->node_content);
+                      free (nse);
+                    }
                   if (closed_command != CM_inforef
                       && (ref->args.number <= 3
                           || ref->args.number <= 4

Modified: trunk/tp/Texinfo/XS/parsetexi/tree.c
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.c        2018-08-18 14:27:06 UTC (rev 
8105)
@@ -47,6 +47,22 @@
 }
 
 void
+free_node_contents (ELEMENT *e)
+{
+  int i;
+  if (e)
+    {
+      for (i = 0; i < e->contents.number; i++)
+        {
+          if (e->contents.list[i]->parent_type
+              == route_not_in_tree)
+            destroy_element (e->contents.list[i]);
+        }
+      free (e);
+    }
+}
+
+void
 destroy_element (ELEMENT *e)
 {
   int i;
@@ -65,11 +81,20 @@
           free (e->extra[i].value);
           break;
         case extra_element_contents:
-          destroy_element ((ELEMENT *) e->extra[i].value);
+          if (e->extra[i].value)
+            destroy_element ((ELEMENT *) e->extra[i].value);
           break;
         case extra_element_contents_array:
           /* TODO */
           break;
+        case extra_node_spec:
+            {
+              NODE_SPEC_EXTRA *nse = (NODE_SPEC_EXTRA *) e->extra[i].value;
+
+              free_node_contents (nse->manual_content);
+              free_node_contents (nse->node_content);
+              free (nse);
+            }
         default:
           /* TODO: need to check if the element is in the main tree or not. */
           break;

Modified: trunk/tp/Texinfo/XS/parsetexi/tree.h
===================================================================
--- trunk/tp/Texinfo/XS/parsetexi/tree.h        2018-08-18 13:04:38 UTC (rev 
8104)
+++ trunk/tp/Texinfo/XS/parsetexi/tree.h        2018-08-18 14:27:06 UTC (rev 
8105)
@@ -26,6 +26,7 @@
 ELEMENT *pop_element_from_contents (ELEMENT *parent);
 ELEMENT *contents_child_by_index (ELEMENT *e, int index);
 ELEMENT *args_child_by_index (ELEMENT *e, int index);
+void free_node_contents (ELEMENT *e);
 void destroy_element (ELEMENT *e);
 void destroy_element_and_children (ELEMENT *e);
 




reply via email to

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