configurator: avoid leaks that LeakSanitizer doesn't like
authorCody P Schafer <dev@codyps.com>
Sun, 16 Aug 2015 22:54:37 +0000 (18:54 -0400)
committerRusty Russell <rusty@rustcorp.com.au>
Mon, 17 Aug 2015 02:29:43 +0000 (11:59 +0930)
These leaks aren't really an issue since they are completely bounded,
but if one is building with leak sanitizer enabled (as
-fsanitize=address does in gcc-5.1), it kills the configurator, which
isn't very useful for us. Add the few free() calls it's looking for.

This is not an actual code issue, they just workaround
some optional compiler peculiarities.

Signed-off-by: Cody P Schafer <dev@codyps.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (split off leak change)
tools/configurator/configurator.c

index f4edb8ee1b214dbf97106bffe91335b12d5737ac..a162ee678dd12c5b46b2ec6a80b1a8e0f08f3410 100644 (file)
@@ -430,6 +430,9 @@ static bool run_test(const char *cmd, struct test *test)
                                test->done = true;
                                return test->answer;
                        }
+                       if (deps[len])
+                               free(dep);
+
                        deps += len;
                        deps += strspn(deps, " ");
                }
@@ -549,6 +552,7 @@ int main(int argc, const char *argv[])
        cmd = connect_args(argv, " -o " OUTPUT_FILE " " INPUT_FILE);
        for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++)
                run_test(cmd, &tests[i]);
+       free(cmd);
 
        unlink(OUTPUT_FILE);
        unlink(INPUT_FILE);
@@ -560,7 +564,9 @@ int main(int argc, const char *argv[])
        printf("#define _GNU_SOURCE /* Always use GNU extensions. */\n");
        printf("#endif\n");
        printf("#define CCAN_COMPILER \"%s\"\n", argv[1]);
-       printf("#define CCAN_CFLAGS \"%s\"\n\n", connect_args(argv+1, ""));
+       cmd = connect_args(argv+1, "");
+       printf("#define CCAN_CFLAGS \"%s\"\n\n", cmd);
+       free(cmd);
        /* This one implies "#include <ccan/..." works, eg. for tdb2.h */
        printf("#define HAVE_CCAN 1\n");
        for (i = 0; i < sizeof(tests)/sizeof(tests[0]); i++)