mirror of
https://github.com/git/git.git
synced 2024-11-23 09:56:28 +08:00
sideband: fix leaks when configuring sideband colors
We read a bunch of configs in `use_sideband_colors()` to configure the colors that Git should use. We never free the strings read from the config though, causing memory leaks. Refactor the code to use `git_config_get_string_tmp()` instead, which does not allocate memory. As we throw the strings away after parsing them anyway there is no need to use allocated strings. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
a09efb74e3
commit
2a2d5da1f2
15
sideband.c
15
sideband.c
@ -30,28 +30,27 @@ static int use_sideband_colors(void)
|
||||
|
||||
const char *key = "color.remote";
|
||||
struct strbuf sb = STRBUF_INIT;
|
||||
char *value;
|
||||
const char *value;
|
||||
int i;
|
||||
|
||||
if (use_sideband_colors_cached >= 0)
|
||||
return use_sideband_colors_cached;
|
||||
|
||||
if (!git_config_get_string(key, &value)) {
|
||||
if (!git_config_get_string_tmp(key, &value))
|
||||
use_sideband_colors_cached = git_config_colorbool(key, value);
|
||||
} else if (!git_config_get_string("color.ui", &value)) {
|
||||
else if (!git_config_get_string_tmp("color.ui", &value))
|
||||
use_sideband_colors_cached = git_config_colorbool("color.ui", value);
|
||||
} else {
|
||||
else
|
||||
use_sideband_colors_cached = GIT_COLOR_AUTO;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(keywords); i++) {
|
||||
strbuf_reset(&sb);
|
||||
strbuf_addf(&sb, "%s.%s", key, keywords[i].keyword);
|
||||
if (git_config_get_string(sb.buf, &value))
|
||||
continue;
|
||||
if (color_parse(value, keywords[i].color))
|
||||
if (git_config_get_string_tmp(sb.buf, &value))
|
||||
continue;
|
||||
color_parse(value, keywords[i].color);
|
||||
}
|
||||
|
||||
strbuf_release(&sb);
|
||||
return use_sideband_colors_cached;
|
||||
}
|
||||
|
@ -2,6 +2,7 @@
|
||||
|
||||
test_description='remote messages are colorized on the client'
|
||||
|
||||
TEST_PASSES_SANITIZE_LEAK=true
|
||||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'setup' '
|
||||
|
Loading…
Reference in New Issue
Block a user