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 <l.s.r@xxxxxx> --- 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