Am 17.04.2018 um 23:30 schrieb Stefan Beller:
> +static void parse_color_fields(const char *s)
> +{
> + struct string_list l = STRING_LIST_INIT_DUP;
> + struct string_list_item *item;
> + enum { EXPECT_DATE, EXPECT_COLOR } next = EXPECT_COLOR;
> +
> + colorfield_nr = 0;
> +
> + /* Ideally this would be stripped and split at the same time? */
Why? Both approxidate() and color_parse() handle spaces.
> + string_list_split(&l, s, ',', -1);
> + ALLOC_GROW(colorfield, colorfield_nr + 1, colorfield_alloc);
> +
> + for_each_string_list_item(item, &l) {
> + switch (next) {
> + case EXPECT_DATE:
> + colorfield[colorfield_nr].hop =
> approxidate(item->string);
> + next = EXPECT_COLOR;
> + colorfield_nr++;
> + ALLOC_GROW(colorfield, colorfield_nr + 1,
> colorfield_alloc);
> + break;
> + case EXPECT_COLOR:
> + if (color_parse(item->string,
> colorfield[colorfield_nr].col))
> + die(_("expecting a color: %s"), item->string);
> + next = EXPECT_DATE;
> + break;
> + }
> + }
> +
> + if (next == EXPECT_COLOR)
> + die (_("must end with a color"));
> +
> + colorfield[colorfield_nr].hop = TIME_MAX;
> +}
This adds a minor memory leak; fix below.
-- >8 --
Subject: [PATCH] blame: release string_list after use in parse_color_fields()
Signed-off-by: Rene Scharfe <[email protected]>
---
builtin/blame.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/builtin/blame.c b/builtin/blame.c
index 4202584f97..3295718841 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -411,6 +411,7 @@ static void parse_color_fields(const char *s)
die (_("must end with a color"));
colorfield[colorfield_nr].hop = TIME_MAX;
+ string_list_clear(&l, 0);
}
static void setup_default_color_by_age(void)
--
2.17.1