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

[PATCH v2 1/5] diff: --dirstat leakfix

From
Junio C Hamano <gitster@pobox.com>
Date
Aug 17, 2023, 22:29 UTC
Message-ID
<20230817222949.3835424-2-gitster@pobox.com>
In-Reply-To
<20230817222949.3835424-1-gitster@pobox.com>

The dirstat_dir structure holds a list of files that had "damages" and is used to summarize the change by directory. It was allocated, used, and then left behind, leaking.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 diff.c                  | 14 ++++++++++++--
 t/t4047-diff-dirstat.sh |  2 ++
 2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/diff.c b/diff.c
index 648f6717a5..03d0cfc700 100644
--- a/diff.c
+++ b/diff.c
@@ -2977,6 +2977,7 @@ static void show_dirstat(struct diff_options *options)
 	unsigned long changed;
 	struct dirstat_dir dir;
 	struct diff_queue_struct *q = &diff_queued_diff;
+	struct dirstat_file *to_free;
 
 	dir.files = NULL;
 	dir.alloc = 0;
@@ -3060,13 +3061,17 @@ static void show_dirstat(struct diff_options *options)
 		dir.nr++;
 	}
 
+	to_free = dir.files;
+
 	/* This can happen even with many files, if everything was renames */
 	if (!changed)
-		return;
+		goto free_return;
 
 	/* Show all directories with more than x% of the changes */
 	QSORT(dir.files, dir.nr, dirstat_compare);
 	gather_dirstat(options, &dir, changed, "", 0);
+free_return:
+	free(to_free);
 }
 
 static void show_dirstat_by_line(struct diffstat_t *data, struct diff_options *options)
@@ -3074,6 +3079,7 @@ static void show_dirstat_by_line(struct diffstat_t *data, struct diff_options *o
 	int i;
 	unsigned long changed;
 	struct dirstat_dir dir;
+	struct dirstat_file *to_free;
 
 	if (data->nr == 0)
 		return;
@@ -3104,13 +3110,17 @@ static void show_dirstat_by_line(struct diffstat_t *data, struct diff_options *o
 		dir.nr++;
 	}
 
+	to_free = dir.files;
+
 	/* This can happen even with many files, if everything was renames */
 	if (!changed)
-		return;
+		goto free_return;
 
 	/* Show all directories with more than x% of the changes */
 	QSORT(dir.files, dir.nr, dirstat_compare);
 	gather_dirstat(options, &dir, changed, "", 0);
+free_return:
+	free(to_free);
 }
 
 static void free_diffstat_file(struct diffstat_file *f)
diff --git a/t/t4047-diff-dirstat.sh b/t/t4047-diff-dirstat.sh
index 7fec2cb9cd..70224c3da1 100755
--- a/t/t4047-diff-dirstat.sh
+++ b/t/t4047-diff-dirstat.sh
@@ -1,6 +1,8 @@
 #!/bin/sh
 
 test_description='diff --dirstat tests'
+
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # set up two commits where the second commit has these files
-- 
2.42.0-rc2
Previous: Junio C HamanoNext: Junio C Hamano
Message 15 of 36 in “git bug report”
  1. Paul WatsonAug 4, 2023
  2. rsbecker@nexbridge.comAug 4, 2023
  3. Paul WatsonAug 4, 2023
  4. rsbecker@nexbridge.comAug 4, 2023
  5. Paul WatsonAug 7, 2023
  6. Paul WatsonAug 8, 2023
  7. rsbecker@nexbridge.comAug 8, 2023
  8. Junio C HamanoAug 8, 2023
  9. diff: tighten interaction between -w and --exit-codeJunio C Hamano, Aug 16, 2023
  10. Jeff KingAug 17, 2023
  11. Junio C HamanoAug 17, 2023
  12. Jeff KingAug 17, 2023
  13. Junio C HamanoAug 17, 2023
  14. 0/5 fix interactions with "-w" and "--exit-code"Junio C Hamano, Aug 17, 2023
  15. 1/5 diff: --dirstat leakfixJunio C Hamano, Aug 17, 2023
  16. 2/5 diff: move the fallback "--exit-code" code downJunio C Hamano, Aug 17, 2023
  17. 3/5 diff: mode-only change should be noticed by "--patch -w --exit-code"Junio C Hamano, Aug 17, 2023
  18. Junio C HamanoAug 18, 2023
  19. 4/5 diff: teach "--stat -w --exit-code" to notice differencesJunio C Hamano, Aug 17, 2023
  20. 5/5 diff: teach "--name-status" and friends to honor "--exit-code -w"Junio C Hamano, Aug 17, 2023
  21. Junio C HamanoAug 17, 2023
  22. 0/5 fix interactions with "-w" and "--exit-code"Junio C Hamano, Aug 18, 2023
  23. 2/5 diff: mode-only change should be noticed by "--patch -w --exit-code"Junio C Hamano, Aug 18, 2023
  24. 3/5 diff: teach "--stat -w --exit-code" to notice differencesJunio C Hamano, Aug 18, 2023
  25. Jeff KingAug 21, 2023
  26. 4/5 t4040: remove test that succeeded for a wrong reasonJunio C Hamano, Aug 18, 2023
  27. 1/5 diff: move the fallback "--exit-code" code downJunio C Hamano, Aug 18, 2023
  28. Jeff KingAug 21, 2023
  29. 5/5 diff: the -w option breaks --exit-code for --raw and other output modesJunio C Hamano, Aug 18, 2023
  30. Jeff KingAug 21, 2023
  31. Jeff KingAug 21, 2023
  32. Jeff KingAug 21, 2023
  33. Junio C HamanoAug 21, 2023
  34. Junio C HamanoAug 21, 2023
  35. Jeff KingAug 22, 2023
  36. Jeff KingAug 21, 2023

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.