git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Phillip Wood <phillip.wood123@gmail.com>
Cc: git@vger.kernel.org, "Junio C Hamano" <gitster@pobox.com>,
	"Martin Ågren" <martin.agren@gmail.com>,
	"Elijah Newren" <newren@gmail.com>,
	"Derrick Stolee" <derrickstolee@github.com>,
	"brian m . carlson" <sandals@crustytoothpaste.net>
Subject: Re: [PATCH v4 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids"
Date: Fri, 01 Apr 2022 19:16:38 +0200	[thread overview]
Message-ID: <220401.868rsoogxf.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <851584aa-a31d-7446-4994-e641f298f0cd@gmail.com>


On Fri, Apr 01 2022, Phillip Wood wrote:

> Hi Ævar
>
> On 31/03/2022 02:11, Ævar Arnfjörð Bjarmason wrote:
>> Fix two memory leaks in "struct rev_info" by freeing that memory in
>> cmd_format_patch(). These two are unusual special-cases in being in
>> the "struct rev_info", but not being "owned" by the code in
>> revision.c. I.e. they're members of the struct so that this code in
>> "builtin/log.c" can pass information code in log-tree.c.
>
> I'm not sure that I necessarily agree that these are owned by
> builtin/log.c. For rev.extra_headers it is set in builtin/log.c but 
> never used there which makes me think we are transferring ownership to
> struct rev_info. For ref_message_ids it is less clear cut but having
> it owned by struct rev_info and freeing it in release_revisions()
> would make things clearer I think. Having some members owned by struct 
> rev_info but others allocated and freed by other code is confusing and
> is likely to lead to memory errors. I don't think struct rev_info is 
> borrowing a reference to these items as they are being allocated for
> it's exclusive use.

This really isn't for the use of revision.[ch] at all, but just
something that's used as ad-hoc message passing between builtin/log.c
and log-tree.c. It just so happens that it's done by ferrying it via the
struct rev_info.

The below patch fails tests, it's just a quick (and obviously flawed)
search/replacement that I hacked up to get the removal of these from
revision.h to compile, which shows that it's just something between
log.c and log-tree.c, pretty much.

Anyway, while I'm 100% in agreement with you that this *should* be fixed
I'd really like to do the bare minimum to address leaks in this initial
iteration.

I.e. you're right that this relatively fragile, and I'm also concern
about catching memory errors.

But being able to run (most of) the format-patch tests tests as a result
of this more isolated leak will leave us much better position to
validate any subsequent larger fixes, such as (something like) the
below.

diff --git a/builtin/log.c b/builtin/log.c
index c211d66d1d0..dc1acd730d1 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -1192,7 +1192,8 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 			      struct commit *origin,
 			      int nr, struct commit **list,
 			      const char *branch_name,
-			      int quiet)
+			      int quiet, const char *extra_headers,
+			      struct string_list *ref_message_ids)
 {
 	const char *committer;
 	struct shortlog log;
@@ -1212,7 +1213,9 @@ static void make_cover_letter(struct rev_info *rev, int use_separate_file,
 	    open_next_file(NULL, rev->numbered_files ? NULL : "cover-letter", rev, quiet))
 		die(_("failed to create cover-letter file"));
 
-	log_write_email_headers(rev, head, &pp.after_subject, &need_8bit_cte, 0);
+	log_write_email_headers(rev, head, pp.after_subject, ref_message_ids,
+				&need_8bit_cte, 0);
+	pp.after_subject = extra_headers;
 
 	for (i = 0; !need_8bit_cte && i < nr; i++) {
 		const char *buf = get_commit_buffer(list[i], NULL);
@@ -1777,6 +1780,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	struct strbuf rdiff2 = STRBUF_INIT;
 	struct strbuf rdiff_title = STRBUF_INIT;
 	int creation_factor = -1;
+	char *extra_headers;
+	struct string_list *ref_message_ids;
 
 	const struct option builtin_format_patch_options[] = {
 		OPT_CALLBACK_F('n', "numbered", &numbered, NULL,
@@ -1946,7 +1951,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 		strbuf_addch(&buf, '\n');
 	}
 
-	rev.extra_headers = strbuf_detach(&buf, NULL);
+	extra_headers = strbuf_detach(&buf, NULL);
 
 	if (from) {
 		if (split_ident_line(&rev.from_ident, from, strlen(from)))
@@ -2174,10 +2179,10 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 	}
 
 	if (in_reply_to || thread || cover_letter)
-		rev.ref_message_ids = xcalloc(1, sizeof(struct string_list));
+		ref_message_ids = xcalloc(1, sizeof(struct string_list));
 	if (in_reply_to) {
 		const char *msgid = clean_message_id(in_reply_to);
-		string_list_append(rev.ref_message_ids, msgid);
+		string_list_append(ref_message_ids, msgid);
 	}
 	rev.numbered_files = just_numbers;
 	rev.patch_suffix = fmt_patch_suffix;
@@ -2185,7 +2190,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 		if (thread)
 			gen_message_id(&rev, "cover");
 		make_cover_letter(&rev, !!output_directory,
-				  origin, nr, list, branch_name, quiet);
+				  origin, nr, list, branch_name, quiet,
+				  extra_headers, ref_message_ids);
 		print_bases(&bases, rev.diffopt.file);
 		print_signature(rev.diffopt.file);
 		total++;
@@ -2229,11 +2235,11 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
 				 * --in-reply-to, if specified.
 				 */
 				if (thread == THREAD_SHALLOW
-				    && rev.ref_message_ids->nr > 0
+				    && ref_message_ids->nr > 0
 				    && (!cover_letter || rev.nr > 1))
 					free(rev.message_id);
 				else
-					string_list_append(rev.ref_message_ids,
+					string_list_append(ref_message_ids,
 							   rev.message_id);
 			}
 			gen_message_id(&rev, oid_to_hex(&commit->object.oid));
diff --git a/log-tree.c b/log-tree.c
index 38e5cccc1a1..66170b75254 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -419,11 +419,11 @@ void fmt_output_email_subject(struct strbuf *sb, struct rev_info *opt)
 }
 
 void log_write_email_headers(struct rev_info *opt, struct commit *commit,
-			     const char **extra_headers_p,
+			     const char *extra_headers,
+			     struct string_list *ref_message_ids,
 			     int *need_8bit_cte_p,
 			     int maybe_multipart)
 {
-	const char *extra_headers = opt->extra_headers;
 	const char *name = oid_to_hex(opt->zero_commit ?
 				      null_oid() : &commit->object.oid);
 
@@ -435,13 +435,13 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 		fprintf(opt->diffopt.file, "Message-Id: <%s>\n", opt->message_id);
 		graph_show_oneline(opt->graph);
 	}
-	if (opt->ref_message_ids && opt->ref_message_ids->nr > 0) {
+	if (ref_message_ids && ref_message_ids->nr > 0) {
 		int i, n;
-		n = opt->ref_message_ids->nr;
-		fprintf(opt->diffopt.file, "In-Reply-To: <%s>\n", opt->ref_message_ids->items[n-1].string);
+		n = ref_message_ids->nr;
+		fprintf(opt->diffopt.file, "In-Reply-To: <%s>\n", ref_message_ids->items[n-1].string);
 		for (i = 0; i < n; i++)
 			fprintf(opt->diffopt.file, "%s<%s>\n", (i > 0 ? "\t" : "References: "),
-			       opt->ref_message_ids->items[i].string);
+			       ref_message_ids->items[i].string);
 		graph_show_oneline(opt->graph);
 	}
 	if (opt->mime_boundary && maybe_multipart) {
@@ -488,7 +488,6 @@ void log_write_email_headers(struct rev_info *opt, struct commit *commit,
 		opt->diffopt.stat_sep = buffer.buf;
 		strbuf_release(&filename);
 	}
-	*extra_headers_p = extra_headers;
 }
 
 static void show_sig_lines(struct rev_info *opt, int status, const char *bol)
@@ -621,13 +620,12 @@ static void next_commentary_block(struct rev_info *opt, struct strbuf *sb)
 	opt->shown_dashes = 1;
 }
 
-void show_log(struct rev_info *opt)
+void show_log_extra_headers(struct rev_info *opt, const char *extra_headers)
 {
 	struct strbuf msgbuf = STRBUF_INIT;
 	struct log_info *log = opt->loginfo;
 	struct commit *commit = log->commit, *parent = log->parent;
 	int abbrev_commit = opt->abbrev_commit ? opt->abbrev : the_hash_algo->hexsz;
-	const char *extra_headers = opt->extra_headers;
 	struct pretty_print_context ctx = {0};
 
 	opt->loginfo = NULL;
@@ -687,7 +685,7 @@ void show_log(struct rev_info *opt)
 	 */
 
 	if (cmit_fmt_is_mail(opt->commit_format)) {
-		log_write_email_headers(opt, commit, &extra_headers,
+		log_write_email_headers(opt, commit, extra_headers, NULL,
 					&ctx.need_8bit_cte, 1);
 		ctx.rev = opt;
 		ctx.print_email_subject = 1;
@@ -848,6 +846,11 @@ void show_log(struct rev_info *opt)
 	}
 }
 
+void show_log(struct rev_info *opt)
+{
+	show_log_extra_headers(opt, NULL);
+}
+
 int log_tree_diff_flush(struct rev_info *opt)
 {
 	opt->shown_dashes = 0;
diff --git a/log-tree.h b/log-tree.h
index e7e4641cf83..32ae026f6fb 100644
--- a/log-tree.h
+++ b/log-tree.h
@@ -16,6 +16,7 @@ struct decoration_filter {
 int parse_decorate_color_config(const char *var, const char *slot_name, const char *value);
 int log_tree_diff_flush(struct rev_info *);
 int log_tree_commit(struct rev_info *, struct commit *);
+void show_log_extra_headers(struct rev_info *opt, const char *extra_headers);
 void show_log(struct rev_info *opt);
 void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
 			     int use_color,
@@ -26,7 +27,8 @@ void format_decorations_extended(struct strbuf *sb, const struct commit *commit,
 			     format_decorations_extended((strbuf), (commit), (color), " (", ", ", ")")
 void show_decorations(struct rev_info *opt, struct commit *commit);
 void log_write_email_headers(struct rev_info *opt, struct commit *commit,
-			     const char **extra_headers_p,
+			     const char *extra_headers,
+			     struct string_list *ref_message_ids,
 			     int *need_8bit_cte_p,
 			     int maybe_multipart);
 void load_ref_decorations(struct decoration_filter *filter, int flags);
diff --git a/revision.h b/revision.h
index 5bc59c7bfe1..e2e08673bba 100644
--- a/revision.h
+++ b/revision.h
@@ -243,9 +243,7 @@ struct rev_info {
 	const char	*reroll_count;
 	char		*message_id;
 	struct ident_split from_ident;
-	struct string_list *ref_message_ids;
 	int		add_signoff;
-	const char	*extra_headers;
 	const char	*log_reencode;
 	const char	*subject_prefix;
 	int		patch_name_max;

  reply	other threads:[~2022-04-01 17:24 UTC|newest]

Thread overview: 252+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-09 13:16 [PATCH 00/24] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 01/24] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 02/24] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 03/24] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-09 20:34   ` Taylor Blau
2022-03-09 13:16 ` [PATCH 04/24] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 05/24] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 21:32   ` Taylor Blau
2022-03-09 22:57   ` Junio C Hamano
2022-03-10  0:28     ` Ævar Arnfjörð Bjarmason
2022-03-10  1:11       ` Junio C Hamano
2022-03-10 14:57         ` Ævar Arnfjörð Bjarmason
2022-03-10 14:56       ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 06/24] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 07/24] revisions API users: use release_revisions() needing "{ 0 }" init Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 08/24] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:08   ` Derrick Stolee
2022-03-09 13:16 ` [PATCH 09/24] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 10/24] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-09 19:12   ` Derrick Stolee
2022-03-09 21:58     ` Taylor Blau
2022-03-09 21:53   ` Taylor Blau
2022-03-09 13:16 ` [PATCH 11/24] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 12/24] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 13/24] revisions API users: use release_revisions() in wt-status.c " Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 14/24] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 15/24] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 16/24] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-09 19:17   ` Derrick Stolee
2022-03-09 13:16 ` [PATCH 17/24] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-09 19:19   ` Derrick Stolee
2022-03-10 15:10     ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 18/24] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 19/24] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 20/24] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:21   ` Derrick Stolee
2022-03-10 14:55     ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 21/24] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-09 19:24   ` Derrick Stolee
2022-03-10  0:13     ` Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 22/24] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 23/24] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-09 13:16 ` [PATCH 24/24] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-09 19:27   ` Derrick Stolee
2022-03-09 14:34 ` [PATCH 00/24] revision.[ch]: add and use release_revisions() Derrick Stolee
2022-03-09 19:30   ` Derrick Stolee
2022-03-09 19:39     ` Ævar Arnfjörð Bjarmason
2022-03-09 20:05   ` Junio C Hamano
2022-03-23 20:31 ` [PATCH v2 00/27] " Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-24  4:13     ` Junio C Hamano
2022-03-24 16:57       ` Ævar Arnfjörð Bjarmason
2022-03-24 17:34         ` Junio C Hamano
2022-03-23 20:31   ` [PATCH v2 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-24  4:23     ` Junio C Hamano
2022-03-23 20:31   ` [PATCH v2 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-24  4:33     ` Junio C Hamano
2022-03-24 16:59       ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-24  4:33     ` Junio C Hamano
2022-03-24 17:01       ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-24  4:43     ` Junio C Hamano
2022-03-24 17:02       ` Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:31   ` [PATCH v2 08/27] revisions API users: use release_revisions() needing "{ 0 }" init Ævar Arnfjörð Bjarmason
2022-03-24  4:53     ` Junio C Hamano
2022-03-24 17:04       ` Ævar Arnfjörð Bjarmason
2022-03-24 17:39         ` Junio C Hamano
2022-03-25  0:47           ` Junio C Hamano
2022-03-23 20:31   ` [PATCH v2 09/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-03-25  0:51     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 10/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25  0:52     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 11/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 12/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-25  1:03     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 13/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 14/27] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-25  1:07     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-25  1:11     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-25  1:16     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-25  1:17     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-25  1:20     ` Junio C Hamano
2022-03-23 20:32   ` [PATCH v2 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-23 20:32   ` [PATCH v2 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-03-25  1:41   ` [PATCH v2 00/27] revision.[ch]: add and use release_revisions() Junio C Hamano
2022-03-25  9:14     ` Ævar Arnfjörð Bjarmason
2022-03-25 17:18   ` [PATCH v3 " Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 08/27] revisions API users: add "goto cleanup" for "rev_info" early exit Ævar Arnfjörð Bjarmason
2022-03-25 20:30       ` Junio C Hamano
2022-03-26  0:37         ` Ævar Arnfjörð Bjarmason
2022-03-26  5:24           ` Junio C Hamano
2022-03-28 17:55             ` Derrick Stolee
2022-03-28 18:55               ` Ævar Arnfjörð Bjarmason
2022-03-28 20:03                 ` Junio C Hamano
2022-03-25 17:18     ` [PATCH v3 09/27] revisions API users: use release_revisions() in submodule.c edge case Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-25 17:18     ` [PATCH v3 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-03-31  1:11     ` [PATCH v4 00/27] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-01 15:13         ` Phillip Wood
2022-04-01 17:16           ` Ævar Arnfjörð Bjarmason [this message]
2022-04-01 19:32             ` Junio C Hamano
2022-03-31  1:11       ` [PATCH v4 05/27] revision.[ch]: split freeing of revs->commit into a function Ævar Arnfjörð Bjarmason
2022-04-01 15:15         ` Phillip Wood
2022-04-01 17:03           ` Junio C Hamano
2022-03-31  1:11       ` [PATCH v4 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-01 15:17         ` Phillip Wood
2022-04-01 17:25           ` Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-01 15:20         ` Phillip Wood
2022-03-31  1:11       ` [PATCH v4 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-03-31 21:14         ` Junio C Hamano
2022-04-01 10:31           ` Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-01 15:29         ` Phillip Wood
2022-04-01 17:29           ` Ævar Arnfjörð Bjarmason
2022-04-01 15:33         ` Phillip Wood
2022-03-31  1:11       ` [PATCH v4 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-02  9:22         ` Phillip Wood
2022-04-03 14:07           ` Ævar Arnfjörð Bjarmason
2022-04-04  9:27             ` Phillip Wood
2022-04-03 21:49           ` Junio C Hamano
2022-03-31  1:11       ` [PATCH v4 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-03-31  1:11       ` [PATCH v4 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-04-02 10:49       ` [PATCH v5 00/27] revision.[ch]: add and use release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 05/27] cocci: add and apply free_commit_list() rules Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-04-03  9:27           ` Phillip Wood
2022-04-03 13:55             ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-04-03  9:33           ` Phillip Wood
2022-04-03 13:57             ` Ævar Arnfjörð Bjarmason
2022-04-04  9:19               ` Phillip Wood
2022-04-02 10:49         ` [PATCH v5 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-04-03 12:54           ` Phillip Wood
2022-04-03 14:01             ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-04-03 15:19           ` Phillip Wood
2022-04-02 10:49         ` [PATCH v5 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-04-03 13:00           ` Phillip Wood
2022-04-03 14:04             ` Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-04-02 10:49         ` [PATCH v5 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason
2022-04-03 13:07         ` [PATCH v5 00/27] revision.[ch]: add and use release_revisions() Phillip Wood
2022-04-03 14:18           ` Ævar Arnfjörð Bjarmason
2022-04-13 20:01         ` [PATCH v6 " Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 01/27] t/helper/test-fast-rebase.c: don't leak "struct strbuf" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 02/27] blame: use "goto cleanup" for cleanup_scoreboard() Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 03/27] string_list API users: use string_list_init_{no,}dup Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 05/27] cocci: add and apply free_commit_list() rules Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 06/27] revision.[ch]: provide and start using a release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 07/27] revisions API users: add straightforward release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 08/27] revision.[ch]: document and move code declared around "init" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 09/27] revisions API users: use release_revisions() needing REV_INFO_INIT Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 10/27] stash: always have the owner of "stash_info" free it Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 11/27] revisions API users: add "goto cleanup" for release_revisions() Ævar Arnfjörð Bjarmason
2022-07-11 18:06             ` Jeff King
2022-07-11 20:12               ` Ævar Arnfjörð Bjarmason
2022-07-12  6:54                 ` Jeff King
2022-07-12  7:03                   ` [PATCH] diff-files: move misplaced cleanup label Jeff King
2022-04-13 20:01           ` [PATCH v6 12/27] revisions API users: use release_revisions() in http-push.c Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 13/27] revisions API users: use release_revisions() in builtin/log.c Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 14/27] revisions API users: use release_revisions() with UNLEAK() Ævar Arnfjörð Bjarmason
2022-04-15 13:58             ` Phillip Wood
2022-04-13 20:01           ` [PATCH v6 15/27] revisions API users: use release_revisions() for "prune_data" users Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 16/27] revisions API: have release_revisions() release "commits" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 17/27] revisions API: have release_revisions() release "mailmap" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 18/27] revisions API: have release_revisions() release "cmdline" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 19/27] revisions API: have release_revisions() release "filter" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 20/27] revisions API: have release_revisions() release "grep_filter" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 21/27] revisions API: have release_revisions() release "prune_data" Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 22/27] revisions API: clear "boundary_commits" in release_revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 23/27] revisions API: release "reflog_info" in release revisions() Ævar Arnfjörð Bjarmason
2022-04-13 20:01           ` [PATCH v6 24/27] revisions API: call diff_free(&revs->pruning) in revisions_release() Ævar Arnfjörð Bjarmason
2022-04-14  5:56           ` [PATCH v6 25/27] revisions API: have release_revisions() release "date_mode" Ævar Arnfjörð Bjarmason
2022-04-14  5:56           ` [PATCH v6 26/27] revisions API: have release_revisions() release "topo_walk_info" Ævar Arnfjörð Bjarmason
2022-04-14  5:56           ` [PATCH v6 27/27] revisions API: add a TODO for diff_free(&revs->diffopt) Ævar Arnfjörð Bjarmason

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=220401.868rsoogxf.gmgdl@evledraar.gmail.com \
    --to=avarab@gmail.com \
    --cc=derrickstolee@github.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=martin.agren@gmail.com \
    --cc=newren@gmail.com \
    --cc=phillip.wood123@gmail.com \
    --cc=sandals@crustytoothpaste.net \
    /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).