@@ -38,7 +38,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
if (!oid) {
if (opt->err_fd)
close(opt->err_fd);
- return err;
+ goto cleanup;
}
if (transport && transport->smart_options &&
@@ -85,8 +85,7 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
promisor_pack_found:
;
} while ((oid = fn(cb_data)) != NULL);
- free(new_pack);
- return 0;
+ goto cleanup;
}
no_promisor_pack_found:
@@ -123,8 +122,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
rev_list.no_stderr = opt->quiet;
if (start_command(&rev_list)) {
- free(new_pack);
- return error(_("Could not run 'git rev-list'"));
+ err = error(_("Could not run 'git rev-list'"));
+ goto cleanup;
}
sigchain_push(SIGPIPE, SIG_IGN);
@@ -157,6 +156,8 @@ int check_connected(oid_iterate_fn fn, void *cb_data,
err = error_errno(_("failed to close rev-list's stdin"));
sigchain_pop(SIGPIPE);
+ err = finish_command(&rev_list) || err;
+cleanup:
free(new_pack);
- return finish_command(&rev_list) || err;
+ return err;
}
Fix a memory leak that's been with us since this code was introduced in c6807a40dcd (clone: open a shortcut for connectivity check, 2013-05-26). We'd never free() the "new_pack" that we'd potentially allocate. Since it's initialized to "NULL" it's safe to call free() here unconditionally. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> --- connected.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)