git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v4 04/27] format-patch: don't leak "extra_headers" or "ref_message_ids"

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Apr 1, 2022, 17:16 UTC
Message-ID
<220401.868rsoogxf.gmgdl@evledraar.gmail.com>
In-Reply-To
<851584aa-a31d-7446-4994-e641f298f0cd@gmail.com>
On Fri, Apr 01 2022, Phillip Wood wrote:
Show 19 quoted lines
> 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;
Previous: Phillip WoodNext: Junio C Hamano
Message 141 of 252 in “revision.[ch]: add and use release_revisions()”
  1. 00/24 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  2. 01/24 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  3. 02/24 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  4. 03/24 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  5. Taylor BlauMar 9, 2022
  6. 04/24 revision.[ch]: split freeing of revs->commit into a functionÆvar Arnfjörð Bjarmason, Mar 9, 2022
  7. 05/24 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  8. Taylor BlauMar 9, 2022
  9. Junio C HamanoMar 9, 2022
  10. Ævar Arnfjörð BjarmasonMar 10, 2022
  11. Junio C HamanoMar 10, 2022
  12. Ævar Arnfjörð BjarmasonMar 10, 2022
  13. Ævar Arnfjörð BjarmasonMar 10, 2022
  14. 06/24 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  15. 07/24 revisions API users: use release_revisions() needing "{ 0 }" initÆvar Arnfjörð Bjarmason, Mar 9, 2022
  16. 08/24 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  17. Derrick StoleeMar 9, 2022
  18. 10/24 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Mar 9, 2022
  19. Derrick StoleeMar 9, 2022
  20. Taylor BlauMar 9, 2022
  21. Taylor BlauMar 9, 2022
  22. 09/24 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Mar 9, 2022
  23. 11/24 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  24. 14/24 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Mar 9, 2022
  25. 15/24 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  26. 21/24 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  27. Derrick StoleeMar 9, 2022
  28. Ævar Arnfjörð BjarmasonMar 10, 2022
  29. 20/24 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  30. Derrick StoleeMar 9, 2022
  31. Ævar Arnfjörð BjarmasonMar 10, 2022
  32. 19/24 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  33. 17/24 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  34. Derrick StoleeMar 9, 2022
  35. Ævar Arnfjörð BjarmasonMar 10, 2022
  36. 18/24 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  37. 16/24 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  38. Derrick StoleeMar 9, 2022
  39. 12/24 revisions API users: use release_revisions() in submodule.c edge caseÆvar Arnfjörð Bjarmason, Mar 9, 2022
  40. 13/24 revisions API users: use release_revisions() in wt-status.c edge caseÆvar Arnfjörð Bjarmason, Mar 9, 2022
  41. 22/24 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Mar 9, 2022
  42. 23/24 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  43. 24/24 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Mar 9, 2022
  44. Derrick StoleeMar 9, 2022
  45. Derrick StoleeMar 9, 2022
  46. Derrick StoleeMar 9, 2022
  47. Ævar Arnfjörð BjarmasonMar 9, 2022
  48. Junio C HamanoMar 9, 2022
  49. 00/27 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  50. 01/27 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  51. Junio C HamanoMar 24, 2022
  52. Ævar Arnfjörð BjarmasonMar 24, 2022
  53. Junio C HamanoMar 24, 2022
  54. 02/27 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  55. Junio C HamanoMar 24, 2022
  56. 03/27 string_list API users: use string_list_init_{no,}dupÆvar Arnfjörð Bjarmason, Mar 23, 2022
  57. 05/27 revision.[ch]: split freeing of revs->commit into a functionÆvar Arnfjörð Bjarmason, Mar 23, 2022
  58. Junio C HamanoMar 24, 2022
  59. Ævar Arnfjörð BjarmasonMar 24, 2022
  60. 06/27 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  61. Junio C HamanoMar 24, 2022
  62. Ævar Arnfjörð BjarmasonMar 24, 2022
  63. 04/27 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  64. Junio C HamanoMar 24, 2022
  65. Ævar Arnfjörð BjarmasonMar 24, 2022
  66. 07/27 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  67. 08/27 revisions API users: use release_revisions() needing "{ 0 }" initÆvar Arnfjörð Bjarmason, Mar 23, 2022
  68. Junio C HamanoMar 24, 2022
  69. Ævar Arnfjörð BjarmasonMar 24, 2022
  70. Junio C HamanoMar 24, 2022
  71. Junio C HamanoMar 25, 2022
  72. 12/27 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Mar 23, 2022
  73. Junio C HamanoMar 25, 2022
  74. 13/27 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  75. 10/27 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  76. Junio C HamanoMar 25, 2022
  77. 11/27 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Mar 23, 2022
  78. 09/27 stash: always have the owner of "stash_info" free itÆvar Arnfjörð Bjarmason, Mar 23, 2022
  79. Junio C HamanoMar 25, 2022
  80. 14/27 revisions API users: use release_revisions() in submodule.c edge caseÆvar Arnfjörð Bjarmason, Mar 23, 2022
  81. Junio C HamanoMar 25, 2022
  82. 16/27 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  83. 15/27 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Mar 23, 2022
  84. 19/27 revisions API: have release_revisions() release "filter"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  85. Junio C HamanoMar 25, 2022
  86. 18/27 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  87. Junio C HamanoMar 25, 2022
  88. 17/27 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  89. Junio C HamanoMar 25, 2022
  90. 20/27 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  91. 22/27 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  92. 21/27 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  93. Junio C HamanoMar 25, 2022
  94. 23/27 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  95. 24/27 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Mar 23, 2022
  96. 27/27 revisions API: add a TODO for diff_free(&revs->diffopt)Ævar Arnfjörð Bjarmason, Mar 23, 2022
  97. 25/27 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  98. 26/27 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Mar 23, 2022
  99. Junio C HamanoMar 25, 2022
  100. Ævar Arnfjörð BjarmasonMar 25, 2022
  101. 00/27 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  102. 21/27 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  103. 01/27 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  104. 13/27 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Mar 25, 2022
  105. 09/27 revisions API users: use release_revisions() in submodule.c edge caseÆvar Arnfjörð Bjarmason, Mar 25, 2022
  106. 26/27 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  107. 23/27 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  108. 08/27 revisions API users: add "goto cleanup" for "rev_info" early exitÆvar Arnfjörð Bjarmason, Mar 25, 2022
  109. Junio C HamanoMar 25, 2022
  110. Ævar Arnfjörð BjarmasonMar 26, 2022
  111. Junio C HamanoMar 26, 2022
  112. Derrick StoleeMar 28, 2022
  113. Ævar Arnfjörð BjarmasonMar 28, 2022
  114. Junio C HamanoMar 28, 2022
  115. 25/27 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  116. 14/27 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  117. 20/27 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  118. 07/27 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  119. 06/27 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  120. 17/27 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  121. 22/27 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  122. 18/27 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  123. 16/27 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  124. 27/27 revisions API: add a TODO for diff_free(&revs->diffopt)Ævar Arnfjörð Bjarmason, Mar 25, 2022
  125. 19/27 revisions API: have release_revisions() release "filter"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  126. 12/27 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Mar 25, 2022
  127. 03/27 string_list API users: use string_list_init_{no,}dupÆvar Arnfjörð Bjarmason, Mar 25, 2022
  128. 05/27 revision.[ch]: split freeing of revs->commit into a functionÆvar Arnfjörð Bjarmason, Mar 25, 2022
  129. 10/27 stash: always have the owner of "stash_info" free itÆvar Arnfjörð Bjarmason, Mar 25, 2022
  130. 02/27 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  131. 15/27 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Mar 25, 2022
  132. 24/27 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  133. 04/27 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Mar 25, 2022
  134. 11/27 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Mar 25, 2022
  135. 00/27 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  136. 01/27 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  137. 02/27 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  138. 03/27 string_list API users: use string_list_init_{no,}dupÆvar Arnfjörð Bjarmason, Mar 31, 2022
  139. 04/27 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  140. Phillip WoodApr 1, 2022
  141. Ævar Arnfjörð BjarmasonApr 1, 2022
  142. Junio C HamanoApr 1, 2022
  143. 05/27 revision.[ch]: split freeing of revs->commit into a functionÆvar Arnfjörð Bjarmason, Mar 31, 2022
  144. Phillip WoodApr 1, 2022
  145. Junio C HamanoApr 1, 2022
  146. 06/27 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  147. Phillip WoodApr 1, 2022
  148. Ævar Arnfjörð BjarmasonApr 1, 2022
  149. 09/27 revisions API users: use release_revisions() needing REV_INFO_INITÆvar Arnfjörð Bjarmason, Mar 31, 2022
  150. Junio C HamanoMar 31, 2022
  151. Ævar Arnfjörð BjarmasonApr 1, 2022
  152. 08/27 revision.[ch]: document and move code declared around "init"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  153. Phillip WoodApr 1, 2022
  154. 07/27 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  155. 12/27 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Mar 31, 2022
  156. 10/27 stash: always have the owner of "stash_info" free itÆvar Arnfjörð Bjarmason, Mar 31, 2022
  157. Phillip WoodApr 1, 2022
  158. Ævar Arnfjörð BjarmasonApr 1, 2022
  159. Phillip WoodApr 1, 2022
  160. 11/27 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  161. 13/27 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Mar 31, 2022
  162. Phillip WoodApr 2, 2022
  163. Ævar Arnfjörð BjarmasonApr 3, 2022
  164. Phillip WoodApr 4, 2022
  165. Junio C HamanoApr 3, 2022
  166. 14/27 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  167. 15/27 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Mar 31, 2022
  168. 17/27 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  169. 19/27 revisions API: have release_revisions() release "filter"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  170. 21/27 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  171. 18/27 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  172. 20/27 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  173. 24/27 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  174. 23/27 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  175. 22/27 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Mar 31, 2022
  176. 27/27 revisions API: add a TODO for diff_free(&revs->diffopt)Ævar Arnfjörð Bjarmason, Mar 31, 2022
  177. 25/27 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  178. 16/27 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  179. 26/27 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Mar 31, 2022
  180. 00/27 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  181. 01/27 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  182. 02/27 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  183. 03/27 string_list API users: use string_list_init_{no,}dupÆvar Arnfjörð Bjarmason, Apr 2, 2022
  184. 04/27 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  185. 05/27 cocci: add and apply free_commit_list() rulesÆvar Arnfjörð Bjarmason, Apr 2, 2022
  186. 06/27 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  187. 07/27 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  188. 08/27 revision.[ch]: document and move code declared around "init"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  189. 09/27 revisions API users: use release_revisions() needing REV_INFO_INITÆvar Arnfjörð Bjarmason, Apr 2, 2022
  190. 10/27 stash: always have the owner of "stash_info" free itÆvar Arnfjörð Bjarmason, Apr 2, 2022
  191. 11/27 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  192. 12/27 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Apr 2, 2022
  193. 13/27 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Apr 2, 2022
  194. 14/27 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  195. Phillip WoodApr 3, 2022
  196. Ævar Arnfjörð BjarmasonApr 3, 2022
  197. 15/27 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Apr 2, 2022
  198. 16/27 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  199. 17/27 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  200. Phillip WoodApr 3, 2022
  201. Ævar Arnfjörð BjarmasonApr 3, 2022
  202. Phillip WoodApr 4, 2022
  203. 18/27 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  204. Phillip WoodApr 3, 2022
  205. Ævar Arnfjörð BjarmasonApr 3, 2022
  206. 27/27 revisions API: add a TODO for diff_free(&revs->diffopt)Ævar Arnfjörð Bjarmason, Apr 2, 2022
  207. 22/27 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  208. 23/27 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  209. Phillip WoodApr 3, 2022
  210. 20/27 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  211. 24/27 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Apr 2, 2022
  212. Phillip WoodApr 3, 2022
  213. Ævar Arnfjörð BjarmasonApr 3, 2022
  214. 26/27 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  215. 25/27 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  216. 21/27 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  217. 19/27 revisions API: have release_revisions() release "filter"Ævar Arnfjörð Bjarmason, Apr 2, 2022
  218. Phillip WoodApr 3, 2022
  219. Ævar Arnfjörð BjarmasonApr 3, 2022
  220. 00/27 revision.[ch]: add and use release_revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  221. 01/27 t/helper/test-fast-rebase.c: don't leak "struct strbuf"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  222. 02/27 blame: use "goto cleanup" for cleanup_scoreboard()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  223. 03/27 string_list API users: use string_list_init_{no,}dupÆvar Arnfjörð Bjarmason, Apr 13, 2022
  224. 04/27 format-patch: don't leak "extra_headers" or "ref_message_ids"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  225. 05/27 cocci: add and apply free_commit_list() rulesÆvar Arnfjörð Bjarmason, Apr 13, 2022
  226. 06/27 revision.[ch]: provide and start using a release_revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  227. 08/27 revision.[ch]: document and move code declared around "init"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  228. 10/27 stash: always have the owner of "stash_info" free itÆvar Arnfjörð Bjarmason, Apr 13, 2022
  229. 09/27 revisions API users: use release_revisions() needing REV_INFO_INITÆvar Arnfjörð Bjarmason, Apr 13, 2022
  230. 07/27 revisions API users: add straightforward release_revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  231. 13/27 revisions API users: use release_revisions() in builtin/log.cÆvar Arnfjörð Bjarmason, Apr 13, 2022
  232. 11/27 revisions API users: add "goto cleanup" for release_revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  233. Jeff KingJul 11, 2022
  234. Ævar Arnfjörð BjarmasonJul 11, 2022
  235. Jeff KingJul 12, 2022
  236. diff-files: move misplaced cleanup labelJeff King, Jul 12, 2022
  237. 12/27 revisions API users: use release_revisions() in http-push.cÆvar Arnfjörð Bjarmason, Apr 13, 2022
  238. 15/27 revisions API users: use release_revisions() for "prune_data" usersÆvar Arnfjörð Bjarmason, Apr 13, 2022
  239. 16/27 revisions API: have release_revisions() release "commits"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  240. 14/27 revisions API users: use release_revisions() with UNLEAK()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  241. Phillip WoodApr 15, 2022
  242. 17/27 revisions API: have release_revisions() release "mailmap"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  243. 19/27 revisions API: have release_revisions() release "filter"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  244. 20/27 revisions API: have release_revisions() release "grep_filter"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  245. 18/27 revisions API: have release_revisions() release "cmdline"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  246. 21/27 revisions API: have release_revisions() release "prune_data"Ævar Arnfjörð Bjarmason, Apr 13, 2022
  247. 23/27 revisions API: release "reflog_info" in release revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  248. 22/27 revisions API: clear "boundary_commits" in release_revisions()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  249. 24/27 revisions API: call diff_free(&revs->pruning) in revisions_release()Ævar Arnfjörð Bjarmason, Apr 13, 2022
  250. 25/27 revisions API: have release_revisions() release "date_mode"Ævar Arnfjörð Bjarmason, Apr 14, 2022
  251. 26/27 revisions API: have release_revisions() release "topo_walk_info"Ævar Arnfjörð Bjarmason, Apr 14, 2022
  252. 27/27 revisions API: add a TODO for diff_free(&revs->diffopt)Ævar Arnfjörð Bjarmason, Apr 14, 2022

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.