Re: [PATCH v4] [GSOC] ref-filter: fix read invalid union member bug
From: Junio C Hamano <hidden>
Date: 2021-05-11 02:29:05
"ZheNing Hu via GitGitGadget" [off-list ref] writes:
Change from last version:
Prove that the bug may appear when using %(color) atom. And add
corresponding test for it.++test_expect_success '%(color:#aa22ac) must success' '
s/success/succeed/ But more importantly, I am not sure how this is supposed to demonstrate existing breakage around the %(push). Did you mean to use %(push) instead of %(refname) or something?
quoted hunk
++ cat >expect <<-\EOF && ++ refs/heads/main ++ refs/heads/side ++ refs/odd/spot ++ refs/tags/annotated-tag ++ refs/tags/doubly-annotated-tag ++ refs/tags/doubly-signed-tag ++ refs/tags/four ++ refs/tags/one ++ refs/tags/signed-tag ++ refs/tags/three ++ refs/tags/two ++ EOF ++ git for-each-ref --format="%(color:#aa22ac)%(refname)" >actual && ++ test_cmp expect actual ++' ++ + test_expect_success 'left alignment is default' ' + cat >expect <<-\EOF && + refname is refs/heads/main |refs/heads/main ref-filter.c | 2 +- t/t6302-for-each-ref-filter.sh | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-)diff --git a/ref-filter.c b/ref-filter.c index a0adb4551d87..213d3773ada3 100644 --- a/ref-filter.c +++ b/ref-filter.c@@ -1730,7 +1730,7 @@ static int populate_value(struct ref_array_item *ref, struct strbuf *err) else v->s = xstrdup(""); continue; - } else if (atom->u.remote_ref.push) { + } else if (!strcmp(atom->name, "push") || starts_with(atom->name, "push:")) { const char *branch_name; v->s = xstrdup(""); if (!skip_prefix(ref->refname, "refs/heads/",diff --git a/t/t6302-for-each-ref-filter.sh b/t/t6302-for-each-ref-filter.sh index 9866b1b57368..38a7d83830aa 100755 --- a/t/t6302-for-each-ref-filter.sh +++ b/t/t6302-for-each-ref-filter.sh@@ -117,6 +117,24 @@ test_expect_success '%(color) must fail' ' test_must_fail git for-each-ref --format="%(color)%(refname)" ' +test_expect_success '%(color:#aa22ac) must success' ' + cat >expect <<-\EOF && + refs/heads/main + refs/heads/side + refs/odd/spot + refs/tags/annotated-tag + refs/tags/doubly-annotated-tag + refs/tags/doubly-signed-tag + refs/tags/four + refs/tags/one + refs/tags/signed-tag + refs/tags/three + refs/tags/two + EOF + git for-each-ref --format="%(color:#aa22ac)%(refname)" >actual && + test_cmp expect actual +' + test_expect_success 'left alignment is default' ' cat >expect <<-\EOF && refname is refs/heads/main |refs/heads/mainbase-commit: 311531c9de557d25ac087c1637818bd2aad6eb3a