Greetings all.

Below is a short patch to fix a couple minor memory leaks in the exec utility. This leak was likely introduced with the support for complex targets.

--Andrew Black

Log:
        * runall.cpp (merge_argv): Update function documentation.
          (run_target): Free argv array returned by merge_argv.

Index: runall.cpp
===================================================================
--- runall.cpp  (revision 432706)
+++ runall.cpp  (working copy)
@@ -73,6 +73,9 @@
    argument string is '%x' (no quotes), the contents of the provided argv
    array will be inserted into the return array at that point.

+   It is the responsibility of the caller to free() the returned blocks of
+   memory, which were allocated by a call to split_opt_string().
+
    @todo Figure out an escaping mechanism to allow '%x' to be passed to an
    executable

@@ -402,7 +405,6 @@
 static void
 run_target (char* target, char** argv)
 {
-    struct exec_attrs status;
     char** childargv;

     assert (0 != target);
@@ -418,12 +420,13 @@
     printf ("%-25.25s ", target_name);
     fflush (stdout);

-    if (!check_target_ok (childargv [0]))
-        return;
+    if (check_target_ok (childargv [0])) {
+        struct exec_attrs status = exec_file (childargv);
+        process_results (childargv [0], &status);
+    }

-    status = exec_file (childargv);
-
-    process_results (childargv [0], &status);
+    free (childargv [0]);
+    free (childargv);
 }

 /**

Reply via email to