From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
"Glen Choo" <chooglen@google.com>,
"Atharva Raykar" <raykar.ath@gmail.com>,
"Prathamesh Chavan" <pc44800@gmail.com>,
"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH v3 00/26] submodule--helper: fix memory leaks
Date: Thu, 21 Jul 2022 21:12:56 +0200 [thread overview]
Message-ID: <cover-v3-00.26-00000000000-20220721T191249Z-avarab@gmail.com> (raw)
In-Reply-To: <cover-v2-00.24-00000000000-20220719T204458Z-avarab@gmail.com>
This series fixes all of the memory leaks in submodule--helper.c that
the test suite spots (which aren't really in submodule.c, branch.c,
object code etc.).
For the v2, see:
https://lore.kernel.org/git/cover-v2-00.24-00000000000-20220719T204458Z-avarab@gmail.com/
Junio: I only replied to one feedback E-Mail of yours, but I think
this re-roll addresses all the rest, as well as the "pathspec" comment
Glen sent in earlier today.
Glen Choo (2):
submodule--helper: add "const" to copy of "update_data"
submodule--helper: refactor "errmsg_str" to be a "struct strbuf"
Ævar Arnfjörð Bjarmason (24):
submodule--helper: replace memset() with { 0 }-initialization
submodule--helper: stop conflating "sb" in clone_submodule()
submodule--helper: pass a "const struct module_clone_data" to
clone_submodule()
submodule--helper: fix a leak in "clone_submodule"
submodule--helper: fix trivial get_default_remote_submodule() leak
submodule--helper: fix most "struct pathspec" memory leaks
submodule--helper: "struct pathspec" memory leak in module_update()
submodule--helper: don't leak {run,capture}_command() cp.dir argument
submodule--helper: add and use *_release() functions
submodule--helper: fix "errmsg_str" memory leak
submodule--helper: fix "sm_path" and other "module_cb_list" leaks
submodule--helper: fix a leak with repo_clear()
submodule--helper: fix a memory leak in get_default_remote_submodule()
submodule--helper: fix "reference" leak is "module_clone_data"
submodule--helper: fix obscure leak in module_add()
submodule--helper: fix a leak in module_add()
submodule--helper: fix a memory leak in print_status()
submodule--helper: free some "displaypath" in "struct update_data"
submodule--helper: rename "int res" to "int ret"
submodule--helper: add skeleton "goto cleanup" to update_submodule()
submodule--helper: don't exit() on failure, return
submodule--helper: free rest of "displaypath" in "struct update_data"
submodule--helper: fix bad config API usage
submodule--helper: fix a configure_added_submodule() leak
builtin/submodule--helper.c | 374 ++++++++++++++++++++---------
t/t1500-rev-parse.sh | 1 +
t/t2403-worktree-move.sh | 1 +
t/t6008-rev-list-submodule.sh | 1 +
t/t6134-pathspec-in-submodule.sh | 1 +
t/t7412-submodule-absorbgitdirs.sh | 1 +
t/t7413-submodule-is-active.sh | 1 +
t/t7414-submodule-mistakes.sh | 2 +
t/t7506-status-submodule.sh | 1 +
t/t7507-commit-verbose.sh | 2 +
10 files changed, 270 insertions(+), 115 deletions(-)
Range-diff against v2:
1: fcdf4a2e2d9 = 1: 3c7ae3e0222 submodule--helper: replace memset() with { 0 }-initialization
-: ----------- > 2: 32e4ae7ead5 submodule--helper: stop conflating "sb" in clone_submodule()
-: ----------- > 3: eee6ca28c6f submodule--helper: pass a "const struct module_clone_data" to clone_submodule()
2: 130a396b837 ! 4: 26f0caf0386 submodule--helper: fix a leak in "clone_submodule"
@@ Metadata
## Commit message ##
submodule--helper: fix a leak in "clone_submodule"
- Fix a memory leak of the "path" member of the "struct
- module_clone_data" in clone_submodule(). This fixes leaks in code
- added in f8eaa0ba98b (submodule--helper, module_clone: always operate
+ Fix a memory leak of the "clone_data_path" variable that we copy or
+ derive from the "struct module_clone_data" in clone_submodule(). This
+ code was refactored in preceding commits, but the leak has been with
+ us since f8eaa0ba98b (submodule--helper, module_clone: always operate
on absolute paths, 2016-03-31).
For the "else" case we don't need to xstrdup() the "clone_data->path",
- if we're not creating a new one we'll leave it to our caller to keep
- track of it.
+ and we don't need to free our own "clone_data_path".
In the case of the module_clone() caller it's from "argv", and doesn't
need to be free'd, and in the case of the add_submodule() caller we
@@ Commit message
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
## builtin/submodule--helper.c ##
-@@ builtin/submodule--helper.c: static int clone_submodule(struct module_clone_data *clone_data)
+@@ builtin/submodule--helper.c: static int clone_submodule(const struct module_clone_data *clone_data,
char *sm_alternate = NULL, *error_strategy = NULL;
- struct strbuf sb = STRBUF_INIT;
struct child_process cp = CHILD_PROCESS_INIT;
+ const char *clone_data_path;
+ char *to_free = NULL;
- submodule_name_to_gitdir(&sb, the_repository, clone_data->name);
- sm_gitdir = absolute_pathdup(sb.buf);
-@@ builtin/submodule--helper.c: static int clone_submodule(struct module_clone_data *clone_data)
-
if (!is_absolute_path(clone_data->path)) {
+ struct strbuf sb = STRBUF_INIT;
+
strbuf_addf(&sb, "%s/%s", get_git_work_tree(), clone_data->path);
-- clone_data->path = strbuf_detach(&sb, NULL);
-+ clone_data->path = to_free = strbuf_detach(&sb, NULL);
+- clone_data_path = strbuf_detach(&sb, NULL);
++ clone_data_path = to_free = strbuf_detach(&sb, NULL);
} else {
-- clone_data->path = xstrdup(clone_data->path);
-+ clone_data->path = clone_data->path;
+- clone_data_path = xstrdup(clone_data_path);
++ clone_data_path = clone_data->path;
}
if (validate_submodule_git_dir(sm_gitdir, clone_data->name) < 0)
-@@ builtin/submodule--helper.c: static int clone_submodule(struct module_clone_data *clone_data)
- strbuf_release(&sb);
+@@ builtin/submodule--helper.c: static int clone_submodule(const struct module_clone_data *clone_data,
+
free(sm_gitdir);
free(p);
+ free(to_free);
3: 25e17bbb058 = 5: 75775bf4f6c submodule--helper: fix trivial get_default_remote_submodule() leak
4: 9fb60485c3e ! 6: 7672ef1305f submodule--helper: fix most "struct pathspec" memory leaks
@@ builtin/submodule--helper.c: static int module_list(int argc, const char **argv,
N_("alternative anchor for relative paths")),
OPT_END()
};
-+ int ret;
++ int ret = 1;
const char *const git_submodule_helper_usage[] = {
N_("git submodule--helper list [--prefix=<path>] [<path>...]"),
@@ builtin/submodule--helper.c: static int module_list(int argc, const char **argv, const char *prefix)
- argc = parse_options(argc, argv, prefix, module_list_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
for (i = 0; i < list.nr; i++) {
const struct cache_entry *ce = list.entries[i];
@@ builtin/submodule--helper.c: static int module_foreach(int argc, const char **ar
N_("git submodule foreach [--quiet] [--recursive] [--] <command>"),
NULL
};
-+ int ret;
++ int ret = 1;
argc = parse_options(argc, argv, prefix, module_foreach_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(0, NULL, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(0, NULL, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(0, NULL, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
info.argc = argc;
info.argv = argv;
@@ builtin/submodule--helper.c: static int module_init(int argc, const char **argv,
N_("git submodule init [<options>] [<path>]"),
NULL
};
-+ int ret;
++ int ret = 1;
argc = parse_options(argc, argv, prefix, module_init_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
/*
* If there are no path args and submodule.active is set then,
@@ builtin/submodule--helper.c: static int module_status(int argc, const char **arg
N_("git submodule status [--quiet] [--cached] [--recursive] [<path>...]"),
NULL
};
-+ int ret;
++ int ret = 1;
argc = parse_options(argc, argv, prefix, module_status_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
info.prefix = prefix;
if (quiet)
@@ builtin/submodule--helper.c: static int module_status(int argc, const char **arg
}
static int module_name(int argc, const char **argv, const char *prefix)
-@@ builtin/submodule--helper.c: static int compute_summary_module_list(struct object_id *head_oid,
- struct strvec diff_args = STRVEC_INIT;
- struct rev_info rev;
- struct module_cb_list list = MODULE_CB_LIST_INIT;
-- int ret = 0;
-+ int ret;
-
- strvec_push(&diff_args, get_diff_cmd(diff_cmd));
- if (info->cached)
-@@ builtin/submodule--helper.c: static int compute_summary_module_list(struct object_id *head_oid,
- else
- run_diff_files(&rev, 0);
- prepare_submodule_summary(info, &list);
-+ ret = 0;
- cleanup:
- strvec_clear(&diff_args);
- release_revisions(&rev);
@@ builtin/submodule--helper.c: static void sync_submodule_cb(const struct cache_entry *list_item, void *cb_data
static int module_sync(int argc, const char **argv, const char *prefix)
{
@@ builtin/submodule--helper.c: static void sync_submodule_cb(const struct cache_en
struct module_list list = MODULE_LIST_INIT;
int quiet = 0;
int recursive = 0;
-+ int ret;
++ int ret = 1;
struct option module_sync_options[] = {
OPT__QUIET(&quiet, N_("suppress output of synchronizing submodule url")),
@@ builtin/submodule--helper.c: static int module_sync(int argc, const char **argv, const char *prefix)
- argc = parse_options(argc, argv, prefix, module_sync_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
info.prefix = prefix;
if (quiet)
@@ builtin/submodule--helper.c: static int module_deinit(int argc, const char **arg
N_("git submodule deinit [--quiet] [-f | --force] [--all | [--] [<path>...]]"),
NULL
};
-+ int ret;
++ int ret = 1;
argc = parse_options(argc, argv, prefix, module_deinit_options,
git_submodule_helper_usage, 0);
@@ builtin/submodule--helper.c: static int module_deinit(int argc, const char **argv, const char *prefix)
- if (!argc && !all)
die(_("Use '--all' if you really want to deinitialize all submodules"));
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
info.prefix = prefix;
if (quiet)
@@ builtin/submodule--helper.c: static int push_check(int argc, const char **argv,
+ struct pathspec pathspec = { 0 };
struct module_list list = MODULE_LIST_INIT;
unsigned flags = ABSORB_GITDIR_RECURSE_SUBMODULES;
-+ int ret;
++ int ret = 1;
struct option embed_gitdir_options[] = {
OPT_STRING(0, "prefix", &prefix,
@@ builtin/submodule--helper.c: static int absorb_git_dirs(int argc, const char **argv, const char *prefix)
- argc = parse_options(argc, argv, prefix, embed_gitdir_options,
git_submodule_helper_usage, 0);
-- if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0)
- return 1;
-+ if (module_list_compute(argc, argv, prefix, &pathspec, &list) < 0) {
-+ ret = 1;
+ goto cleanup;
-+ }
for (i = 0; i < list.nr; i++)
absorb_git_dir_into_superproject(list.entries[i]->name, flags);
5: a4672aa9c94 = 7: 325aa1521e2 submodule--helper: "struct pathspec" memory leak in module_update()
6: 7925db18b33 = 8: 424b24961b5 submodule--helper: don't leak {run,capture}_command() cp.dir argument
7: 30883f3aa01 = 9: abf5c4754a4 submodule--helper: add "const" to copy of "update_data"
8: b7582391c91 = 10: 6ab5aabae35 submodule--helper: add and use *_release() functions
9: 92737916083 = 11: feec1f20bf9 submodule--helper: refactor "errmsg_str" to be a "struct strbuf"
10: c81a4f69179 = 12: d368db73de7 submodule--helper: fix "errmsg_str" memory leak
11: c25b55c9528 ! 13: 5be941b3d1b submodule--helper: fix "sm_path" and other "module_cb_list" leaks
@@ builtin/submodule--helper.c: struct module_cb {
+ char *sm_path;
};
#define MODULE_CB_INIT { 0 }
+
+static void module_cb_release(struct module_cb *mcb)
+{
+ free(mcb->sm_path);
+}
-
++
struct module_cb_list {
struct module_cb **entries;
-@@ builtin/submodule--helper.c: struct module_cb_list {
+ int alloc, nr;
};
#define MODULE_CB_LIST_INIT { 0 }
12: 303447bd4f5 = 14: b8560e8c111 submodule--helper: fix a leak with repo_clear()
13: f8ededcdf77 = 15: abfd61f9f05 submodule--helper: fix a memory leak in get_default_remote_submodule()
14: c7610088968 ! 16: b8df96a9cf0 submodule--helper: fix "reference" leak is "module_clone_data"
@@ Commit message
Those commits added an xstrdup()'d member of the
STRING_LIST_INIT_NODUP'd "struct string_list". We need to free()
those, but not the ones we get from argv, let's make use of the "util"
- member, if it has a pointer it's the pointer we'll need to free.
+ member, if it has a pointer it's the pointer we'll need to free,
+ otherwise it'll be NULL (i.e. from argv).
To fix this create a a module_clone_data_release() function to go with
the MODULE_CLONE_DATA_INIT added in a98b02c1128 (submodule--helper:
@@ builtin/submodule--helper.c: static int add_possible_reference_from_superproject
switch (sas->error_mode) {
@@ builtin/submodule--helper.c: static int module_clone(int argc, const char **argv, const char *prefix)
- clone_submodule(&clone_data);
+ clone_submodule(&clone_data, &clone_data.reference);
list_objects_filter_release(&filter_options);
+ module_clone_data_release(&clone_data);
return 0;
@@ builtin/submodule--helper.c: static int add_submodule(const struct add_data *add
{
char *submod_gitdir_path;
struct module_clone_data clone_data = MODULE_CLONE_DATA_INIT;
-+ int ret;
++ int ret = -1;
/* perhaps the path already exists and is already a git repo, else clone it */
if (is_directory(add_data->sm_path)) {
@@ builtin/submodule--helper.c: static int add_submodule(const struct add_data *add
if (add_data->depth >= 0)
clone_data.depth = xstrfmt("%d", add_data->depth);
-- if (clone_submodule(&clone_data))
+ if (clone_submodule(&clone_data, &clone_data.reference))
- return -1;
-+ if (clone_submodule(&clone_data)) {
-+ ret = -1;
+ goto cleanup;
-+ }
prepare_submodule_repo_env(&cp.env);
cp.git_cmd = 1;
15: abd8e2eef3a ! 17: 7811bdbf149 submodule--helper: fix obscure leak in module_add()
@@ builtin/submodule--helper.c: static int module_add(int argc, const char **argv,
struct add_data add_data = ADD_DATA_INIT;
char *to_free = NULL;
+ struct strbuf sb = STRBUF_INIT;
-+ int ret;
++ int ret = 1;
struct option options[] = {
OPT_STRING('b', "branch", &add_data.branch, N_("branch"),
@@ builtin/submodule--helper.c: static int module_add(int argc, const char **argv,
if(!add_data.sm_name)
@@ builtin/submodule--helper.c: static int module_add(int argc, const char **argv, const char *prefix)
+ add_data.progress = !!progress;
add_data.dissociate = !!dissociate;
- if (add_submodule(&add_data)) {
+- if (add_submodule(&add_data)) {
- free(add_data.sm_path);
- return 1;
-+ ret = 1;
+- }
++ if (add_submodule(&add_data))
+ goto cleanup;
- }
configure_added_submodule(&add_data);
+
+ ret = 0;
16: 1f01203d154 = 18: 01566d63926 submodule--helper: fix a leak in module_add()
17: 12b8a945486 = 19: 7ef89abed86 submodule--helper: fix a memory leak in print_status()
18: fac2c4491f3 = 20: b8d47fc7d70 submodule--helper: free some "displaypath" in "struct update_data"
19: cf0c8851954 = 21: 4fb17f0dff1 submodule--helper: rename "int res" to "int ret"
20: 7882e33cdca ! 22: af83925046b submodule--helper: add skeleton "goto cleanup" to update_submodule()
@@ builtin/submodule--helper.c: static void update_data_to_args(struct update_data
static int update_submodule(struct update_data *update_data)
{
-+ int ret;
++ int ret = 1;
+
ensure_core_worktree(update_data->sm_path);
@@ builtin/submodule--helper.c: static int update_submodule(struct update_data *upd
}
- if (!oideq(&update_data->oid, &update_data->suboid) || update_data->force)
-- if (run_update_procedure(update_data))
-- return 1;
+ if (!oideq(&update_data->oid, &update_data->suboid) || update_data->force) {
-+ ret = run_update_procedure(update_data);
-+ if (ret) {
-+ ret = 1;
+ if (run_update_procedure(update_data))
+- return 1;
+ goto cleanup;
-+ }
+ }
if (update_data->recursive) {
21: 31395a2b4f8 ! 23: 4c60784d281 submodule--helper: don't exit() on failure, return
@@ builtin/submodule--helper.c: static void update_data_to_args(struct update_data
+static int update_submodule(struct update_data *update_data,
+ int *must_die_on_failure)
{
- int ret;
+ int ret = 1;
@@ builtin/submodule--helper.c: static int update_submodule(struct update_data *update_data)
}
if (!oideq(&update_data->oid, &update_data->suboid) || update_data->force) {
-- ret = run_update_procedure(update_data);
-- if (ret) {
+- if (run_update_procedure(update_data))
+ ret = run_update_procedure(update_data, must_die_on_failure);
+ if (ret && *must_die_on_failure) {
+ goto cleanup;
+ } else if (ret) {
- ret = 1;
++ ret = 1;
goto cleanup;
- }
++ }
+ }
+
+ if (update_data->recursive) {
@@ builtin/submodule--helper.c: static int update_submodule(struct update_data *update_data)
die_message(_("Failed to recurse into submodule path '%s'"),
update_data->displaypath);
22: a2168cf1378 ! 24: 7551af195ad submodule--helper: free rest of "displaypath" in "struct update_data"
@@ builtin/submodule--helper.c
@@ builtin/submodule--helper.c: static int update_submodule(struct update_data *update_data,
int *must_die_on_failure)
{
- int ret;
+ int ret = 1;
+ char *to_free, *restore = update_data->displaypath;
ensure_core_worktree(update_data->sm_path);
23: d77c6665ca9 = 25: f650716cd7e submodule--helper: fix bad config API usage
24: 531db4ddae6 = 26: 581ce0872c0 submodule--helper: fix a configure_added_submodule() leak
--
2.37.1.1095.g0bd6f54ba8a
next prev parent reply other threads:[~2022-07-21 19:13 UTC|newest]
Thread overview: 186+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-07-13 13:16 [PATCH 00/11] submodule--helper: fix memory leaks Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 01/11] submodule.c: free() memory from xgetcwd() Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 02/11] submodule--helper: replace memset() with { 0 }-initialization Ævar Arnfjörð Bjarmason
2022-07-13 21:00 ` Glen Choo
2022-07-13 21:19 ` Junio C Hamano
2022-07-13 22:41 ` Glen Choo
2022-07-14 10:25 ` Ævar Arnfjörð Bjarmason
2022-07-14 17:19 ` Junio C Hamano
2022-07-15 0:17 ` Glen Choo
2022-07-13 13:16 ` [PATCH 03/11] submodule--helper: fix "module_clone_data" memory leaks Ævar Arnfjörð Bjarmason
2022-07-13 17:37 ` Glen Choo
2022-07-13 18:05 ` Glen Choo
2022-07-13 20:30 ` Ævar Arnfjörð Bjarmason
2022-07-13 23:04 ` Glen Choo
2022-07-14 0:06 ` Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 04/11] submodule--helper: fix "struct pathspec" " Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 05/11] submodule--helper: free() leaking {run,capture}_command() argument Ævar Arnfjörð Bjarmason
2022-07-14 3:36 ` Glen Choo
2022-07-14 14:43 ` Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 06/11] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-07-14 18:11 ` Glen Choo
2022-07-13 13:16 ` [PATCH 07/11] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-07-14 18:20 ` Glen Choo
2022-07-13 13:16 ` [PATCH 08/11] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 09/11] submodule--helper: free "char *" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-14 18:33 ` Glen Choo
2022-07-18 16:10 ` Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 10/11] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-07-13 13:16 ` [PATCH 11/11] submodule--helper: fix "reference" leak is "module_clone_data" Ævar Arnfjörð Bjarmason
2022-07-14 18:42 ` Glen Choo
2022-07-19 20:46 ` [PATCH v2 00/24] submodule--helper: fix memory leaks Ævar Arnfjörð Bjarmason
2022-07-19 20:46 ` [PATCH v2 01/24] submodule--helper: replace memset() with { 0 }-initialization Ævar Arnfjörð Bjarmason
2022-07-19 21:21 ` Junio C Hamano
2022-07-19 20:46 ` [PATCH v2 02/24] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-07-19 21:31 ` Junio C Hamano
2022-07-19 20:46 ` [PATCH v2 03/24] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-07-19 20:46 ` [PATCH v2 04/24] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-07-20 16:33 ` Junio C Hamano
2022-07-21 17:49 ` Glen Choo
2022-07-19 20:46 ` [PATCH v2 05/24] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-07-20 16:43 ` Junio C Hamano
2022-07-21 19:54 ` Glen Choo
2022-07-19 20:46 ` [PATCH v2 06/24] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-07-19 20:46 ` [PATCH v2 07/24] submodule--helper: add "const" to copy of "update_data" Ævar Arnfjörð Bjarmason
2022-07-19 20:46 ` [PATCH v2 08/24] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-07-20 17:06 ` Junio C Hamano
2022-07-21 17:44 ` Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 09/24] submodule--helper: refactor "errmsg_str" to be a "struct strbuf" Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 10/24] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 11/24] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-07-20 22:35 ` Junio C Hamano
2022-07-19 20:47 ` [PATCH v2 12/24] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 13/24] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 14/24] submodule--helper: fix "reference" leak is "module_clone_data" Ævar Arnfjörð Bjarmason
2022-07-21 0:50 ` Junio C Hamano
2022-07-19 20:47 ` [PATCH v2 15/24] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 16/24] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 17/24] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 18/24] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 19/24] submodule--helper: rename "int res" to "int ret" Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 20/24] submodule--helper: add skeleton "goto cleanup" to update_submodule() Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 21/24] submodule--helper: don't exit() on failure, return Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 22/24] submodule--helper: free rest of "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 23/24] submodule--helper: fix bad config API usage Ævar Arnfjörð Bjarmason
2022-07-19 20:47 ` [PATCH v2 24/24] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-07-21 19:12 ` Ævar Arnfjörð Bjarmason [this message]
2022-07-21 19:12 ` [PATCH v3 01/26] submodule--helper: replace memset() with { 0 }-initialization Ævar Arnfjörð Bjarmason
2022-07-21 19:12 ` [PATCH v3 02/26] submodule--helper: stop conflating "sb" in clone_submodule() Ævar Arnfjörð Bjarmason
2022-07-21 21:16 ` Junio C Hamano
2022-07-22 13:50 ` Ævar Arnfjörð Bjarmason
2022-07-22 16:48 ` Glen Choo
2022-07-22 18:47 ` Junio C Hamano
2022-07-28 16:30 ` Ævar Arnfjörð Bjarmason
2022-07-21 19:12 ` [PATCH v3 03/26] submodule--helper: pass a "const struct module_clone_data" to clone_submodule() Ævar Arnfjörð Bjarmason
2022-07-21 21:26 ` Junio C Hamano
2022-07-25 17:07 ` Glen Choo
2022-07-21 19:13 ` [PATCH v3 04/26] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-07-21 21:30 ` Junio C Hamano
2022-07-22 11:30 ` Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 05/26] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 06/26] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-07-21 21:37 ` Junio C Hamano
2022-07-21 19:13 ` [PATCH v3 07/26] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 08/26] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 09/26] submodule--helper: add "const" to copy of "update_data" Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 10/26] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 11/26] submodule--helper: refactor "errmsg_str" to be a "struct strbuf" Ævar Arnfjörð Bjarmason
2022-07-25 23:15 ` Glen Choo
2022-07-21 19:13 ` [PATCH v3 12/26] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 13/26] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 14/26] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 15/26] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 16/26] submodule--helper: fix "reference" leak is "module_clone_data" Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 17/26] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-07-21 21:45 ` Junio C Hamano
2022-07-21 19:13 ` [PATCH v3 18/26] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 19/26] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 20/26] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 21/26] submodule--helper: rename "int res" to "int ret" Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 22/26] submodule--helper: add skeleton "goto cleanup" to update_submodule() Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 23/26] submodule--helper: don't exit() on failure, return Ævar Arnfjörð Bjarmason
2022-07-25 23:57 ` Glen Choo
2022-07-21 19:13 ` [PATCH v3 24/26] submodule--helper: free rest of "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-26 1:06 ` Glen Choo
2022-07-21 19:13 ` [PATCH v3 25/26] submodule--helper: fix bad config API usage Ævar Arnfjörð Bjarmason
2022-07-21 19:13 ` [PATCH v3 26/26] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-07-21 21:51 ` Junio C Hamano
2022-07-28 16:29 ` [PATCH v4 00/17] submodule--helper: (only) fix memory leaks Ævar Arnfjörð Bjarmason
2022-07-28 16:29 ` [PATCH v4 01/17] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-07-28 16:29 ` [PATCH v4 02/17] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-07-28 16:29 ` [PATCH v4 03/17] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-07-28 16:29 ` [PATCH v4 04/17] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-07-28 16:29 ` [PATCH v4 05/17] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 06/17] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 07/17] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 09/17] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 10/17] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 11/17] submodule--helper: fix "reference" leak Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 12/17] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 13/17] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 14/17] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 15/17] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 16/17] submodule--helper: free rest of " Ævar Arnfjörð Bjarmason
2022-07-28 16:30 ` [PATCH v4 17/17] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 00/17] submodule--helper: fix memory leaks Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 01/17] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 02/17] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 03/17] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-08-03 22:59 ` Glen Choo
2022-08-04 7:04 ` Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 04/17] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 05/17] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 06/17] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 07/17] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-08-03 23:10 ` Glen Choo
2022-08-02 15:54 ` [PATCH v5 09/17] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 10/17] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 11/17] submodule--helper: fix "reference" leak Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 12/17] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 13/17] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 14/17] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 15/17] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-08-02 15:54 ` [PATCH v5 16/17] submodule--helper: free rest of " Ævar Arnfjörð Bjarmason
2022-08-04 18:04 ` Glen Choo
2022-08-02 15:54 ` [PATCH v5 17/17] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 00/17] submodule--helper: fix memory leaks Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 01/17] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 02/17] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 03/17] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 04/17] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 05/17] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 06/17] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 07/17] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 09/17] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 10/17] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 11/17] submodule--helper: fix "reference" leak Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 12/17] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 13/17] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 14/17] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 15/17] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-08-21 13:59 ` [PATCH v6 16/17] submodule--helper: free rest of " Ævar Arnfjörð Bjarmason
2022-08-24 23:03 ` Glen Choo
2022-08-21 13:59 ` [PATCH v6 17/17] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 00/17] submodule--helper: fix memory leaks Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 01/17] submodule--helper: fix a leak in "clone_submodule" Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 02/17] submodule--helper: fix trivial get_default_remote_submodule() leak Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 03/17] submodule--helper: fix most "struct pathspec" memory leaks Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 04/17] submodule--helper: "struct pathspec" memory leak in module_update() Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 05/17] submodule--helper: don't leak {run,capture}_command() cp.dir argument Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 06/17] submodule--helper: add and use *_release() functions Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 07/17] submodule--helper: fix "errmsg_str" memory leak Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 08/17] submodule--helper: fix "sm_path" and other "module_cb_list" leaks Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 09/17] submodule--helper: fix a leak with repo_clear() Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 10/17] submodule--helper: fix a memory leak in get_default_remote_submodule() Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 11/17] submodule--helper: fix "reference" leak Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 12/17] submodule--helper: fix obscure leak in module_add() Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 13/17] submodule--helper: fix a " Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 14/17] submodule--helper: fix a memory leak in print_status() Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 15/17] submodule--helper: free some "displaypath" in "struct update_data" Ævar Arnfjörð Bjarmason
2022-08-31 23:14 ` [PATCH v7 16/17] submodule--helper: free rest of " Ævar Arnfjörð Bjarmason
2022-09-01 21:20 ` Glen Choo
2022-08-31 23:14 ` [PATCH v7 17/17] submodule--helper: fix a configure_added_submodule() leak Ævar Arnfjörð Bjarmason
2022-09-01 21:23 ` [PATCH v7 00/17] submodule--helper: fix memory leaks Glen Choo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cover-v3-00.26-00000000000-20220721T191249Z-avarab@gmail.com \
--to=avarab@gmail.com \
--cc=chooglen@google.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=pc44800@gmail.com \
--cc=raykar.ath@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).