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

[PATCH v2 06/11] merge-file: refactor for subsequent memory leak fix

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jul 1, 2022, 10:42 UTC
Message-ID
<patch-v2-06.11-d894e97b5ae-20220701T104017Z-avarab@gmail.com>
In-Reply-To
<cover-v2-00.11-00000000000-20220701T104017Z-avarab@gmail.com>
Refactor the code in builtin/merge-file.c to:
 * Use the initializer to zero out "mmfs", and use modern C syntax for
   the rest.
 * Refactor the the inner loop to use a variable and "if/else if"
   pattern followed by "return". This will make a change to change it to
   a "goto cleanup" pattern smaller.
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 builtin/merge-file.c | 26 ++++++++++++++------------
 1 file changed, 14 insertions(+), 12 deletions(-)
diff --git a/builtin/merge-file.c b/builtin/merge-file.c
index e695867ee54..793817f3cb9 100644
--- a/builtin/merge-file.c
+++ b/builtin/merge-file.c
@@ -25,10 +25,10 @@ static int label_cb(const struct option *opt, const char *arg, int unset)
 
 int cmd_merge_file(int argc, const char **argv, const char *prefix)
 {
-	const char *names[3] = { NULL, NULL, NULL };
-	mmfile_t mmfs[3];
-	mmbuffer_t result = {NULL, 0};
-	xmparam_t xmp = {{0}};
+	const char *names[3] = { 0 };
+	mmfile_t mmfs[3] = { 0 };
+	mmbuffer_t result = { 0 };
+	xmparam_t xmp = { 0 };
 	int ret = 0, i = 0, to_stdout = 0;
 	int quiet = 0;
 	struct option options[] = {
@@ -71,21 +71,23 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix)
 
 	for (i = 0; i < 3; i++) {
 		char *fname;
-		int ret;
+		mmfile_t *mmf = mmfs + i;
 
 		if (!names[i])
 			names[i] = argv[i];
 
 		fname = prefix_filename(prefix, argv[i]);
-		ret = read_mmfile(mmfs + i, fname);
+
+		if (read_mmfile(mmf, fname))
+			ret = -1;
+		else if (mmf->size > MAX_XDIFF_SIZE ||
+			 buffer_is_binary(mmf->ptr, mmf->size))
+			ret = error("Cannot merge binary files: %s",
+				    argv[i]);
+
 		free(fname);
 		if (ret)
-			return -1;
-
-		if (mmfs[i].size > MAX_XDIFF_SIZE ||
-		    buffer_is_binary(mmfs[i].ptr, mmfs[i].size))
-			return error("Cannot merge binary files: %s",
-					argv[i]);
+			return ret;
 	}
 
 	xmp.ancestor = names[1];
-- 
2.37.0.900.g4d0de1cceb2
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 24 of 31 in “built-ins: fix common memory leaks”
  1. 00/11 built-ins: fix common memory leaksÆvar Arnfjörð Bjarmason, Jun 30, 2022
  2. 01/11 check-ref-format: fix trivial memory leakÆvar Arnfjörð Bjarmason, Jun 30, 2022
  3. Junio C HamanoJun 30, 2022
  4. 02/11 clone: fix memory leak in copy_ref() callÆvar Arnfjörð Bjarmason, Jun 30, 2022
  5. Junio C HamanoJun 30, 2022
  6. 03/11 submodule.c: free() memory from xgetcwd()Ævar Arnfjörð Bjarmason, Jun 30, 2022
  7. 04/11 revert: free "struct replay_opts" membersÆvar Arnfjörð Bjarmason, Jun 30, 2022
  8. 05/11 cat-file: fix a memory leak in --batch-command modeÆvar Arnfjörð Bjarmason, Jun 30, 2022
  9. 06/11 merge-file: refactor for subsequent memory leak fixÆvar Arnfjörð Bjarmason, Jun 30, 2022
  10. 07/11 merge-file: fix memory leaks on error pathÆvar Arnfjörð Bjarmason, Jun 30, 2022
  11. 08/11 checkout: add a missing clear_unpack_trees_porcelain()Ævar Arnfjörð Bjarmason, Jun 30, 2022
  12. Junio C HamanoJun 30, 2022
  13. Ævar Arnfjörð BjarmasonJun 30, 2022
  14. Junio C HamanoJun 30, 2022
  15. 09/11 gc: fix a memory leakÆvar Arnfjörð Bjarmason, Jun 30, 2022
  16. 10/11 cat-file: fix a common "struct object_context" memory leakÆvar Arnfjörð Bjarmason, Jun 30, 2022
  17. 11/11 pull: fix a "struct oid_array" memory leakÆvar Arnfjörð Bjarmason, Jun 30, 2022
  18. 00/11 built-ins: fix common memory leaksÆvar Arnfjörð Bjarmason, Jul 1, 2022
  19. 01/11 check-ref-format: fix trivial memory leakÆvar Arnfjörð Bjarmason, Jul 1, 2022
  20. 02/11 clone: fix memory leak in wanted_peer_refs()Ævar Arnfjörð Bjarmason, Jul 1, 2022
  21. 03/11 submodule.c: free() memory from xgetcwd()Ævar Arnfjörð Bjarmason, Jul 1, 2022
  22. 04/11 revert: free "struct replay_opts" membersÆvar Arnfjörð Bjarmason, Jul 1, 2022
  23. 05/11 cat-file: fix a memory leak in --batch-command modeÆvar Arnfjörð Bjarmason, Jul 1, 2022
  24. 06/11 merge-file: refactor for subsequent memory leak fixÆvar Arnfjörð Bjarmason, Jul 1, 2022
  25. 09/11 gc: fix a memory leakÆvar Arnfjörð Bjarmason, Jul 1, 2022
  26. 08/11 checkout: avoid "struct unpack_trees_options" leakÆvar Arnfjörð Bjarmason, Jul 1, 2022
  27. Junio C HamanoJul 1, 2022
  28. 07/11 merge-file: fix memory leaks on error pathÆvar Arnfjörð Bjarmason, Jul 1, 2022
  29. 10/11 cat-file: fix a common "struct object_context" memory leakÆvar Arnfjörð Bjarmason, Jul 1, 2022
  30. 11/11 pull: fix a "struct oid_array" memory leakÆvar Arnfjörð Bjarmason, Jul 1, 2022
  31. Junio C HamanoJul 1, 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.