git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] [GSOC] ref-filter: solve bugs caused by enumeration

From
ZheNing Hu <adlternative@gmail.com>
Date
May 6, 2021, 10:39 UTC
Message-ID
<CAOLTT8S9TbRWGPeGKR9=cDnaw2RMukawV48dPEK1KL0X_87udA@mail.gmail.com>
In-Reply-To
<xmqqk0oczao3.fsf@gitster.g>
> This time you avoided the word enumeration, and it made it clearer.
> The word commonly used is "condition" where you said "judgment", I
> think, and wit that it would probably be even more clear.
>
OK.
Show 9 quoted lines
> 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.
>

Yes, that's what it means. I got it wrong before, of course used_atom.u is not a enum, it's union.

Show 7 quoted lines
> So the fix was to see what atom it is by checking its name member?
> Is starts_with() a reliable test?  A fictitious atom "pushe" will be
> different from "push" or "push:<something>", but will still pass
> that test, so from the point of view of future-proofing the tests,
> shouldn't it do the same check as the one at the beginning of
> remote_ref_atom_parser()?
>
I think it's not necesssary. Before we call `populate_value()`,
`parse_ref_filter_atom()` only allow user use atom which match
 "valid_atom" entry fully, something like "pushe" will be rejected
and process die with "fatal: unknown field name: pushe", so it didn't
pass this "starts_with()" test.
        /* Is the atom a valid one? */
        for (i = 0; i < ARRAY_SIZE(valid_atom); i++) {
                int len = strlen(valid_atom[i].name);
                if (len == atom_len && !memcmp(valid_atom[i].name, sp, len))
                        break;
        }
        if (ARRAY_SIZE(valid_atom) <= i)
                return strbuf_addf_ret(err, -1, _("unknown field name: %.*s"),
                                       (int)(ep-atom), atom);
> Thanks.

Thanks. -- ZheNing Hu

Previous: Junio C HamanoNext: Junio C Hamano
Message 5 of 31 in “[GSOC] ref-filter: solve bugs caused by enumeration”
  1. [GSOC] ref-filter: solve bugs caused by enumerationZheNing Hu via GitGitGadget, May 5, 2021
  2. Junio C HamanoMay 6, 2021
  3. ZheNing HuMay 6, 2021
  4. Junio C HamanoMay 6, 2021
  5. ZheNing HuMay 6, 2021
  6. Junio C HamanoMay 6, 2021
  7. ZheNing HuMay 6, 2021
  8. Junio C HamanoMay 6, 2021
  9. ZheNing HuMay 7, 2021
  10. Junio C HamanoMay 7, 2021
  11. ZheNing HuMay 7, 2021
  12. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 6, 2021
  13. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 8, 2021
  14. Junio C HamanoMay 10, 2021
  15. ZheNing HuMay 10, 2021
  16. Junio C HamanoMay 10, 2021
  17. ZheNing HuMay 10, 2021
  18. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 10, 2021
  19. Junio C HamanoMay 11, 2021
  20. ZheNing HuMay 11, 2021
  21. Junio C HamanoMay 11, 2021
  22. ZheNing HuMay 11, 2021
  23. Junio C HamanoMay 11, 2021
  24. ZheNing HuMay 11, 2021
  25. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 11, 2021
  26. Junio C HamanoMay 12, 2021
  27. ZheNing HuMay 12, 2021
  28. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 12, 2021
  29. Junio C HamanoMay 12, 2021
  30. ZheNing HuMay 13, 2021
  31. [GSOC] ref-filter: fix read invalid union member bugZheNing Hu via GitGitGadget, May 13, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.