Re: [PATCH v6 2/9] ref: check the full refname instead of basename
- From
shejialuo <shejialuo@gmail.com>
- Date
- Nov 6, 2024, 12:37 UTC
- Message-ID
- <Zyti_WrBfP8wA2ny@ArchLinux>
- In-Reply-To
- <ZynFKPFcNQILce3E@pks.im>
On Tue, Nov 05, 2024 at 08:11:42AM +0100, Patrick Steinhardt wrote:
[snip]
Show 21 quoted lines
> > diff --git a/refs/files-backend.c b/refs/files-backend.c
> > index 03d2503276..f246c92684 100644
> > --- a/refs/files-backend.c
> > +++ b/refs/files-backend.c
> > @@ -3519,10 +3519,10 @@ static int files_fsck_refs_name(struct ref_store *ref_store UNUSED,
> > if (iter->basename[0] != '.' && ends_with(iter->basename, ".lock"))
> > goto cleanup;
> >
> > - if (check_refname_format(iter->basename, REFNAME_ALLOW_ONELEVEL)) {
> > + strbuf_addf(&sb, "%s/%s", refs_check_dir, iter->relative_path);
> > + if (check_refname_format(sb.buf, 0)) {
> > struct fsck_ref_report report = { 0 };
> >
> > - strbuf_addf(&sb, "%s/%s", refs_check_dir, iter->relative_path);
> > report.path = sb.buf;
> > ret = fsck_report_ref(o, &report,
> > FSCK_MSG_BAD_REF_NAME,
>
> So this only works right now because we never check root refs in the
> first place? Maybe that is worth a comment.
> Yes, I agree. I will improve this in the next version.
Show 17 quoted lines
> > diff --git a/t/t0602-reffiles-fsck.sh b/t/t0602-reffiles-fsck.sh > > index 71a4d1a5ae..0aee377439 100755 > > --- a/t/t0602-reffiles-fsck.sh > > +++ b/t/t0602-reffiles-fsck.sh > > @@ -25,6 +25,13 @@ test_expect_success 'ref name should be checked' ' > > git tag tag-2 && > > git tag multi_hierarchy/tag-2 && > > > > + cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && > > + git refs verify 2>err && > > + cat >expect <<-EOF && > > + EOF > > + test_must_be_empty err && > > + rm $branch_dir_prefix/@ && > > `expect` isn't used here as you use `test_must_be_empty`. >
Thanks, I will improve this in the next version.
Show 21 quoted lines
> > cp $branch_dir_prefix/branch-1 $branch_dir_prefix/.branch-1 && > > test_must_fail git refs verify 2>err && > > cat >expect <<-EOF && > > @@ -33,20 +40,20 @@ test_expect_success 'ref name should be checked' ' > > rm $branch_dir_prefix/.branch-1 && > > test_cmp expect err && > > > > - cp $branch_dir_prefix/branch-1 $branch_dir_prefix/@ && > > + cp $branch_dir_prefix/branch-1 $branch_dir_prefix/'\'' branch-1'\'' && > > test_must_fail git refs verify 2>err && > > cat >expect <<-EOF && > > - error: refs/heads/@: badRefName: invalid refname format > > + error: refs/heads/ branch-1: badRefName: invalid refname format > > EOF > > - rm $branch_dir_prefix/@ && > > + rm $branch_dir_prefix/'\'' branch-1'\'' && > > test_cmp expect err && > > Okay, we now allow `refs/heads/@`, but still don't allow other bad > formatting like spaces in the refname. >
Yes, this is a mistake. Junio have told me in this patch and I have realized this.
https://lore.kernel.org/git/xmqqjzei1mtb.fsf@gitster.g/
> Patrick
Thanks, Jialuo