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....@web.de>
---
 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

Reply via email to