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

[Libguestfs] [PATCH] generator.ml: Fix string list memory leak



Parsed string lists are allocated by malloc, but were never freed.
---
 src/generator.ml |   16 +++++++++++++++-
 1 files changed, 15 insertions(+), 1 deletions(-)

diff --git a/src/generator.ml b/src/generator.ml
index 7571f95..c72c329 100755
--- a/src/generator.ml
+++ b/src/generator.ml
@@ -6320,7 +6320,7 @@ and generate_fish_cmds () =
         | OptString n
         | FileIn n
         | FileOut n -> pr "  const char *%s;\n" n
-        | StringList n | DeviceList n -> pr "  char *const *%s;\n" n
+        | StringList n | DeviceList n -> pr "  char **%s;\n" n
         | Bool n -> pr "  int %s;\n" n
         | Int n -> pr "  int %s;\n" n
       ) (snd style);
@@ -6364,6 +6364,20 @@ and generate_fish_cmds () =
       generate_c_call_args ~handle:"g" style;
       pr ";\n";
 
+      (* XXX: There must be a cleaner way to write this *)
+      iteri (
+        fun i ->
+            function
+            | StringList name | DeviceList name ->
+              pr "  char **%s_i = %s;\n" name name;
+              pr "  while(*%s_i) {\n" name;
+              pr "    free(*%s_i);\n" name;
+              pr "    %s_i++;\n" name;
+              pr "  }\n";
+              pr "  free(%s);\n" name;
+            | _ -> ();
+      ) (snd style);
+
       (* Check return value for errors and display command results. *)
       (match fst style with
        | RErr -> pr "  return r;\n"
-- 
1.6.2.5


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