From: Junio C Hamano <gitster@pobox.com>
To: "ZheNing Hu via GitGitGadget" <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org,
Johannes Schindelin <Johannes.Schindelin@gmx.de>,
ZheNing Hu <adlternative@gmail.com>
Subject: Re: [PATCH v3] [GSOC] ref-filter: fix read invalid union member bug
Date: Mon, 10 May 2021 16:27:36 +0900 [thread overview]
Message-ID: <xmqqcztzqc9j.fsf@gitster.g> (raw)
In-Reply-To: <pull.949.v3.git.1620487572222.gitgitgadget@gmail.com> (ZheNing Hu via GitGitGadget's message of "Sat, 08 May 2021 15:26:11 +0000")
"ZheNing Hu via GitGitGadget" <gitgitgadget@gmail.com> writes:
> From: ZheNing Hu <adlternative@gmail.com>
>
> used_atom.u is an union, and it has different members depending on
> what atom the auxiliary data the union part of the "struct
> used_atom" wants to record. At most only one of the members can be
> valid at any one time. Since the code checks u.remote_ref without
> even making sure if the atom is "push" or "push:" (which are only
> two cases that u.remote_ref.push becomes valid), but u.remote_ref
> shares the same storage for other members of the union, the check
> was reading from an invalid member, which was the bug.
>
> Modify the condition here to check whether the atom name
> equals to "push" or starts with "push:", to avoid reading the
> value of invalid member of the union.
>
> Helped-by: Junio C Hamano <gitster@pobox.com>
> Signed-off-by: ZheNing Hu <adlternative@gmail.com>
> ---
Just a final sanity check. Is this a recent breakage or was the
code introduced at cc72385f (for-each-ref: let upstream/push
optionally report the remote name, 2017-10-05) broken from the
beginning?
I am wondering if it is easy to add a test to cover the codepath
that is affected by this change.
Thanks.
> 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/",
>
> base-commit: 311531c9de557d25ac087c1637818bd2aad6eb3a
next prev parent reply other threads:[~2021-05-10 7:27 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-05 15:31 [PATCH] [GSOC] ref-filter: solve bugs caused by enumeration ZheNing Hu via GitGitGadget
2021-05-06 1:53 ` Junio C Hamano
2021-05-06 5:02 ` ZheNing Hu
2021-05-06 5:35 ` Junio C Hamano
2021-05-06 10:39 ` ZheNing Hu
2021-05-06 11:20 ` Junio C Hamano
2021-05-06 11:52 ` ZheNing Hu
2021-05-06 21:20 ` Junio C Hamano
2021-05-07 4:32 ` ZheNing Hu
2021-05-07 4:49 ` Junio C Hamano
2021-05-07 5:09 ` ZheNing Hu
2021-05-06 16:31 ` [PATCH v2] [GSOC] ref-filter: fix read invalid union member bug ZheNing Hu via GitGitGadget
2021-05-08 15:26 ` [PATCH v3] " ZheNing Hu via GitGitGadget
2021-05-10 7:21 ` Junio C Hamano
2021-05-10 12:35 ` ZheNing Hu
2021-05-10 7:27 ` Junio C Hamano [this message]
2021-05-10 12:51 ` ZheNing Hu
2021-05-10 15:01 ` [PATCH v4] " ZheNing Hu via GitGitGadget
2021-05-11 2:29 ` Junio C Hamano
2021-05-11 6:28 ` ZheNing Hu
2021-05-11 9:30 ` Junio C Hamano
2021-05-11 11:47 ` ZheNing Hu
2021-05-11 13:12 ` Junio C Hamano
2021-05-11 13:31 ` ZheNing Hu
2021-05-11 15:35 ` [PATCH v5] " ZheNing Hu via GitGitGadget
2021-05-12 1:36 ` Junio C Hamano
2021-05-12 10:37 ` ZheNing Hu
2021-05-12 12:12 ` [PATCH v6] " ZheNing Hu via GitGitGadget
2021-05-12 23:24 ` Junio C Hamano
2021-05-13 9:29 ` ZheNing Hu
2021-05-13 15:13 ` [PATCH v7] " ZheNing Hu via GitGitGadget
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqcztzqc9j.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=adlternative@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.