Patrick Steinhardt <ps@xxxxxx> writes: > diff --git a/config.c b/config.c > index 6421894614..cb78b652ee 100644 > --- a/config.c > +++ b/config.c > @@ -1596,7 +1596,9 @@ static int git_default_core_config(const char *var, const char *value, > else if (value[0]) { > if (strchr(value, '\n')) > return error(_("%s cannot contain newline"), var); > - comment_line_str = xstrdup(value); > + free(comment_line_str_allocated); > + comment_line_str = comment_line_str_allocated = > + xstrdup(value); If you are to follow the _to_free pattern, you do not have to allocate here, no? We borrow the value in the configset and point at it via comment_line_str, and clear comment_line_str_to_free because there is nothing to free now. I.e. comment_line_str = value; FREE_AND_NULL(comment_line_str_allocated); I still think the approach taken by the previous iteration was simpler and much less error prone, though.