mirror of
https://github.com/git/git.git
synced 2024-09-08 03:50:44 +02:00
config: plug various memory leaks
Now that memory ownership rules around `git_config_string()` and `git_config_pathname()` are clearer, it also got easier to spot that the returned memory needs to be free'd. Plug a subset of those cases and mark now-passing tests as leak free. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
1b261c20ed
commit
49eb597ce0
4
alias.c
4
alias.c
@ -21,9 +21,11 @@ static int config_alias_cb(const char *key, const char *value,
|
||||
return 0;
|
||||
|
||||
if (data->alias) {
|
||||
if (!strcasecmp(p, data->alias))
|
||||
if (!strcasecmp(p, data->alias)) {
|
||||
FREE_AND_NULL(data->v);
|
||||
return git_config_string(&data->v,
|
||||
key, value);
|
||||
}
|
||||
} else if (data->list) {
|
||||
string_list_append(data->list, p);
|
||||
}
|
||||
|
36
config.c
36
config.c
@ -1414,8 +1414,10 @@ static int git_default_core_config(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.attributesfile"))
|
||||
if (!strcmp(var, "core.attributesfile")) {
|
||||
FREE_AND_NULL(git_attributes_file);
|
||||
return git_config_pathname(&git_attributes_file, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.hookspath")) {
|
||||
if (ctx->kvi && ctx->kvi->scope == CONFIG_SCOPE_LOCAL &&
|
||||
@ -1428,6 +1430,7 @@ static int git_default_core_config(const char *var, const char *value,
|
||||
"again with "
|
||||
"`GIT_CLONE_PROTECTION_ACTIVE=false`"),
|
||||
value);
|
||||
FREE_AND_NULL(git_hooks_path);
|
||||
return git_config_pathname(&git_hooks_path, var, value);
|
||||
}
|
||||
|
||||
@ -1576,8 +1579,10 @@ static int git_default_core_config(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.editor"))
|
||||
if (!strcmp(var, "core.editor")) {
|
||||
FREE_AND_NULL(editor_program);
|
||||
return git_config_string(&editor_program, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.commentchar") ||
|
||||
!strcmp(var, "core.commentstring")) {
|
||||
@ -1595,11 +1600,13 @@ static int git_default_core_config(const char *var, const char *value,
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.askpass"))
|
||||
if (!strcmp(var, "core.askpass")) {
|
||||
FREE_AND_NULL(askpass_program);
|
||||
return git_config_string(&askpass_program, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "core.excludesfile")) {
|
||||
free(excludes_file);
|
||||
FREE_AND_NULL(excludes_file);
|
||||
return git_config_pathname(&excludes_file, var, value);
|
||||
}
|
||||
|
||||
@ -1702,11 +1709,15 @@ static int git_default_sparse_config(const char *var, const char *value)
|
||||
|
||||
static int git_default_i18n_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "i18n.commitencoding"))
|
||||
if (!strcmp(var, "i18n.commitencoding")) {
|
||||
FREE_AND_NULL(git_commit_encoding);
|
||||
return git_config_string(&git_commit_encoding, var, value);
|
||||
}
|
||||
|
||||
if (!strcmp(var, "i18n.logoutputencoding"))
|
||||
if (!strcmp(var, "i18n.logoutputencoding")) {
|
||||
FREE_AND_NULL(git_log_output_encoding);
|
||||
return git_config_string(&git_log_output_encoding, var, value);
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.txt. */
|
||||
return 0;
|
||||
@ -1779,10 +1790,15 @@ static int git_default_push_config(const char *var, const char *value)
|
||||
|
||||
static int git_default_mailmap_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "mailmap.file"))
|
||||
if (!strcmp(var, "mailmap.file")) {
|
||||
FREE_AND_NULL(git_mailmap_file);
|
||||
return git_config_pathname(&git_mailmap_file, var, value);
|
||||
if (!strcmp(var, "mailmap.blob"))
|
||||
}
|
||||
|
||||
if (!strcmp(var, "mailmap.blob")) {
|
||||
FREE_AND_NULL(git_mailmap_blob);
|
||||
return git_config_string(&git_mailmap_blob, var, value);
|
||||
}
|
||||
|
||||
/* Add other config variables here and to Documentation/config.txt. */
|
||||
return 0;
|
||||
@ -1790,8 +1806,10 @@ static int git_default_mailmap_config(const char *var, const char *value)
|
||||
|
||||
static int git_default_attr_config(const char *var, const char *value)
|
||||
{
|
||||
if (!strcmp(var, "attr.tree"))
|
||||
if (!strcmp(var, "attr.tree")) {
|
||||
FREE_AND_NULL(git_attr_tree);
|
||||
return git_config_string(&git_attr_tree, var, value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Add other attribute related config variables here and to
|
||||
|
@ -7,6 +7,7 @@
|
||||
|
||||
test_description='Compatibility with $XDG_CONFIG_HOME/git/ files'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'read config: xdg file exists and ~/.gitconfig doesn'\''t' '
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
test_description='Test the core.hooksPath configuration variable'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'set up a pre-commit hook in core.hooksPath' '
|
||||
|
@ -5,6 +5,7 @@ test_description='auto squash'
|
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
. "$TEST_DIRECTORY"/lib-rebase.sh
|
||||
|
@ -12,6 +12,7 @@ This test tries to verify the sanity of the --submodule option of git diff.
|
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
# Tested non-UTF-8 encoding
|
||||
|
@ -10,6 +10,7 @@ test_description='Support for diff format verbose submodule difference in git di
|
||||
This test tries to verify the sanity of --submodule=diff option of git diff.
|
||||
'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
# Tested non-UTF-8 encoding
|
||||
|
@ -1,6 +1,8 @@
|
||||
#!/bin/sh
|
||||
|
||||
test_description='test log with i18n features'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./lib-gettext.sh
|
||||
|
||||
# two forms of é
|
||||
|
@ -8,6 +8,7 @@ test_description='git rev-list --pretty=format test'
|
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
. "$TEST_DIRECTORY"/lib-terminal.sh
|
||||
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
test_description='GIT_EDITOR, core.editor, and stuff'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
unset EDITOR VISUAL GIT_EDITOR
|
||||
|
@ -10,6 +10,7 @@ Documented tests for git reset'
|
||||
GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main
|
||||
export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
commit_msg () {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
test_description='git svn honors i18n.commitEncoding in config'
|
||||
|
||||
TEST_FAILS_SANITIZE_LEAK=true
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
compare_git_head_with () {
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
test_description='git svn refuses to dcommit non-UTF8 messages'
|
||||
|
||||
TEST_FAILS_SANITIZE_LEAK=true
|
||||
. ./lib-git-svn.sh
|
||||
|
||||
# ISO-2022-JP can pass for valid UTF-8, so skipping that in this test
|
||||
|
Loading…
Reference in New Issue
Block a user