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

[PATCH v3 4/6] config.c: don't leak memory in handle_path_include()

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 22, 2021, 18:19 UTC
Message-ID
<patch-v3-4.6-3607b905627-20211022T175227Z-avarab@gmail.com>
In-Reply-To
<cover-v3-0.6-00000000000-20211022T175227Z-avarab@gmail.com>

Fix a memory leak in the error() path in handle_path_include(), this allows us to run t1305-config-include.sh under SANITIZE=leak, previously 4 tests there would fail. This fixes up a leak in 9b25a0b52e0 (config: add include directive, 2012-02-06).

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 config.c                  | 7 +++++--
 t/t1305-config-include.sh | 1 +
 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/config.c b/config.c
index 2dcbe901b6b..c5873f3a706 100644
--- a/config.c
+++ b/config.c
@@ -148,8 +148,10 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 	if (!is_absolute_path(path)) {
 		char *slash;
 
-		if (!cf || !cf->path)
-			return error(_("relative config includes must come from files"));
+		if (!cf || !cf->path) {
+			ret = error(_("relative config includes must come from files"));
+			goto cleanup;
+		}
 
 		slash = find_last_dir_sep(cf->path);
 		if (slash)
@@ -167,6 +169,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc
 		ret = git_config_from_file(git_config_include, path, inc);
 		inc->depth--;
 	}
+cleanup:
 	strbuf_release(&buf);
 	free(expanded);
 	return ret;
diff --git a/t/t1305-config-include.sh b/t/t1305-config-include.sh
index ccbb116c016..5cde79ef8c4 100755
--- a/t/t1305-config-include.sh
+++ b/t/t1305-config-include.sh
@@ -1,6 +1,7 @@
 #!/bin/sh
 
 test_description='test config file include directives'
+TEST_PASSES_SANITIZE_LEAK=true
 . ./test-lib.sh
 
 # Force setup_explicit_git_dir() to run until the end. This is needed
-- 
2.33.1.1494.g88b39a443e1
Previous: Junio C HamanoNext: Junio C Hamano
Message 21 of 26 in “leak tests: free() before die for two API functions”
  1. leak tests: free() before die for two API functionsÆvar Arnfjörð Bjarmason, Oct 21, 2021
  2. Andrzej HuntOct 21, 2021
  3. Junio C HamanoOct 21, 2021
  4. Martin ÅgrenOct 21, 2021
  5. 0/3 refs.c + config.c: plug memory leaksÆvar Arnfjörð Bjarmason, Oct 21, 2021
  6. 2/3 config.c: don't leak memory in handle_path_include()Ævar Arnfjörð Bjarmason, Oct 21, 2021
  7. Junio C HamanoOct 21, 2021
  8. Ævar Arnfjörð BjarmasonOct 22, 2021
  9. Junio C HamanoOct 22, 2021
  10. Ævar Arnfjörð BjarmasonOct 22, 2021
  11. 1/3 refs.c: make "repo_default_branch_name" static, remove xstrfmt()Ævar Arnfjörð Bjarmason, Oct 21, 2021
  12. Junio C HamanoOct 21, 2021
  13. 3/3 config.c: free(expanded) before die(), work around GCC oddityÆvar Arnfjörð Bjarmason, Oct 21, 2021
  14. Junio C HamanoOct 21, 2021
  15. 0/6 usage.c: add die_message() & plug memory leaks in refs.c & config.cÆvar Arnfjörð Bjarmason, Oct 22, 2021
  16. 1/6 usage.c: add a die_message() routineÆvar Arnfjörð Bjarmason, Oct 22, 2021
  17. Junio C HamanoOct 24, 2021
  18. 2/6 usage.c API users: use die_message() where appropriateÆvar Arnfjörð Bjarmason, Oct 22, 2021
  19. 3/6 usage.c + gc: add and use a die_message_errno()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  20. Junio C HamanoOct 24, 2021
  21. 4/6 config.c: don't leak memory in handle_path_include()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  22. Junio C HamanoOct 24, 2021
  23. 5/6 config.c: free(expanded) before die(), work around GCC oddityÆvar Arnfjörð Bjarmason, Oct 22, 2021
  24. Jeff KingOct 26, 2021
  25. 6/6 refs: plug memory leak in repo_default_branch_name()Ævar Arnfjörð Bjarmason, Oct 22, 2021
  26. Jonathan TanOct 27, 2021

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.