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:

committed by
Junio C Hamano

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";
|
const char *key = "color.remote";
|
||||||
struct strbuf sb = STRBUF_INIT;
|
struct strbuf sb = STRBUF_INIT;
|
||||||
char *value;
|
const char *value;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (use_sideband_colors_cached >= 0)
|
if (use_sideband_colors_cached >= 0)
|
||||||
return use_sideband_colors_cached;
|
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);
|
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);
|
use_sideband_colors_cached = git_config_colorbool("color.ui", value);
|
||||||
} else {
|
else
|
||||||
use_sideband_colors_cached = GIT_COLOR_AUTO;
|
use_sideband_colors_cached = GIT_COLOR_AUTO;
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(keywords); i++) {
|
for (i = 0; i < ARRAY_SIZE(keywords); i++) {
|
||||||
strbuf_reset(&sb);
|
strbuf_reset(&sb);
|
||||||
strbuf_addf(&sb, "%s.%s", key, keywords[i].keyword);
|
strbuf_addf(&sb, "%s.%s", key, keywords[i].keyword);
|
||||||
if (git_config_get_string(sb.buf, &value))
|
if (git_config_get_string_tmp(sb.buf, &value))
|
||||||
continue;
|
|
||||||
if (color_parse(value, keywords[i].color))
|
|
||||||
continue;
|
continue;
|
||||||
|
color_parse(value, keywords[i].color);
|
||||||
}
|
}
|
||||||
|
|
||||||
strbuf_release(&sb);
|
strbuf_release(&sb);
|
||||||
return use_sideband_colors_cached;
|
return use_sideband_colors_cached;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
test_description='remote messages are colorized on the client'
|
test_description='remote messages are colorized on the client'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
test_expect_success 'setup' '
|
test_expect_success 'setup' '
|
||||||
|
Reference in New Issue
Block a user