]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
tests: Fix some memory leaks in testcases.
authorMark Wielaard <mjw@redhat.com>
Tue, 1 Dec 2015 14:55:08 +0000 (15:55 +0100)
committerMark Wielaard <mjw@redhat.com>
Sat, 2 Jan 2016 19:37:44 +0000 (20:37 +0100)
Make sure all structures allocated in the testcases are disposed so
running them under valgrind will show no memory leaks.

Signed-off-by: Mark Wielaard <mjw@redhat.com>
tests/ChangeLog
tests/addrcfi.c
tests/addrscopes.c
tests/alldts.c
tests/allregs.c
tests/dwarf-getstring.c
tests/funcscopes.c
tests/rerequest_tag.c
tests/test-flag-nobits.c

index 69a25fc6e8b27534e1ffde8b514a88b1a08f0acd..4c56400cf7e19c30c4f086183be241dd1fd30151 100644 (file)
@@ -1,3 +1,15 @@
+2015-12-01  Mark Wielaard  <mjw@redhat.com>
+
+       * test-flag-nobits.c (main): Call elf_end.
+       * rerequest_tag.c (main): Call dwarf_end.
+       * funcscopes.c (handle_function): Free scopes.
+       * dwarf-getstring.c (main): Call dwarf_end.
+       * allregs.c (main): Free state.info.
+       * alldts.c (main): Free dyn.
+       * addrcfi.c (handle_address): Free stuff.frame between handle_cfi
+       calls.
+       * addrscopes.c (handle_address): Free scopes.
+
 2015-10-16  Mark Wielaard  <mjw@redhat.com>
 
        * Makefile.am [BUILD_STATIC] (libdw): Add -lz.
index eb950c0be33de62544876cc9c79797d27b2224a5..589b8513ca658c11800e18879a5a4aece82b6d5d 100644 (file)
@@ -160,10 +160,19 @@ handle_address (GElf_Addr pc, Dwfl *dwfl)
   Dwfl_Module *mod = dwfl_addrmodule (dwfl, pc);
 
   struct stuff stuff;
-  return (handle_cfi (dwfl, ".eh_frame",
-                     dwfl_module_eh_cfi (mod, &stuff.bias), pc, &stuff)
-         & handle_cfi (dwfl, ".debug_frame",
-                       dwfl_module_dwarf_cfi (mod, &stuff.bias), pc, &stuff));
+  stuff.frame = NULL;
+  stuff.bias = 0;
+  int res = handle_cfi (dwfl, ".eh_frame",
+                       dwfl_module_eh_cfi (mod, &stuff.bias), pc, &stuff);
+  free (stuff.frame);
+
+  stuff.frame = NULL;
+  stuff.bias = 0;
+  res &= handle_cfi (dwfl, ".debug_frame",
+                    dwfl_module_dwarf_cfi (mod, &stuff.bias), pc, &stuff);
+  free (stuff.frame);
+
+  return res;
 }
 
 int
index 2285d2ca90c730305c6a869847890106db04a8e8..791569f51cbbc604746bb57150df10fa8e2ea583 100644 (file)
@@ -134,6 +134,7 @@ handle_address (GElf_Addr pc, Dwfl *dwfl)
 
          print_vars (indent + INDENT, die);
        }
+      free (scopes);
     }
 }
 
index c39b8fb617721ddbbb9eb78b3a8d7ddbfe153fd9..eaecaf573090fd931a1061eb7403417403ca36cd 100644 (file)
@@ -256,6 +256,9 @@ main (void)
   /* And the data allocated in the .shstrtab section.  */
   free (data->d_buf);
 
+  /* And the dynamic entries.  */
+  free (dyn);
+
   /* All done.  */
   if (elf_end (elf) != 0)
     {
index 901d4e886ff27b21c060cdedee6e49bf1dc8e00a..286f7e3cd0a2c56fa95b998501b54131a015aba1 100644 (file)
@@ -184,6 +184,7 @@ main (int argc, char **argv)
                    dwarf_encoding_string (state.info[i].type),
                    state.info[i].bits);
          }
+      free (state.info);
     }
   else
     do
index 824edef87f918790138805b22ffc01b0f3917236..ffa3e375aef9dd0cd494f3c0d7f94ad7b21f82ff 100644 (file)
@@ -70,6 +70,7 @@ main (int argc, char *argv[])
          offset += len + 1;
        }
 
+      dwarf_end (dbg);
       close (fd);
     }
 
index 55cb4facde8b61dc54cebd34871809806afc1a95..9c901858391ca59f36490810bb5c2903e9d7d2f8 100644 (file)
@@ -162,6 +162,7 @@ handle_function (Dwarf_Die *funcdie, void *arg)
 
          print_vars (indent + INDENT, die);
        }
+      free (scopes);
     }
 
   return 0;
index d0bf5f24abe31d2d1c52502acdd8749130e6189c..b4d46271a05c6c895cf89549913a9b3f4e47120f 100644 (file)
@@ -42,5 +42,6 @@ main (int argc, char **argv)
   assert (die == &die_mem);
   assert (dwarf_tag (die) == 0);
 
+  dwarf_end (dw);
   return 0;
 }
index ff19ce202ea3dd5ef8630eb54d3efc6b9d23eec0..15d44ea8cd73592e6b22426dfa038e152295b0d8 100644 (file)
@@ -36,4 +36,7 @@ main (int argc, char **argv)
   Elf_Scn *scn = NULL;
   while ((scn = elf_nextscn (stripped, scn)) != NULL)
     elf_flagdata (elf_getdata (scn, NULL), ELF_C_SET, ELF_F_DIRTY);
+
+  elf_end (stripped);
+  return 0;
 }