Re: [RFC] Implement ref content consistency check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



shejialuo <shejialuo@xxxxxxxxx> writes:

> Hi All:
>
> We have already set up the infrastructure of the ref consistency.
> However, we have only add ref name check when establishing the
> infrastructure in below:
>
>   https://lore.kernel.org/git/ZrSqMmD-quQ18a9F@ArchLinux.localdomain/
>
> Actually, we already have a patch here which has already implemented the
> ref content consistency check. But during the review process, we have
> encountered some problems. The intention of this RFC is to make sure
> what content we should check and also to what extend.
>
> I conclude the following info:
>
> 1. For the regular ref which has a trailing garbage, we should warn the
> user. This is the most simplest situation, we could reply on
> "parse_loose_ref_content" to do this.
> 2. For the symref, we could also rely on "parse_loose_ref_content" to
> get the "pointee", and check the location of the "pointee", check the
> name of the "pointee" and the file type of the "pointee".
> 3. FOr the symbolic ref, we could follow the idea of 2.
>

Just to understand clearly, when you're talking about 'symbolic ref' you
are referring to symbolic links?

I ask because, as per our documentation in
'Documentation/git-symbolic-ref.txt':

  In the past, `.git/HEAD` was a symbolic link pointing at
  `refs/heads/master`.  When we wanted to switch to another branch, we
  did `ln -sf refs/heads/newbranch .git/HEAD`, and when we wanted to
  find out which branch we are on, we did `readlink .git/HEAD`. But
  symbolic links are not entirely portable, so they are now deprecated
  and symbolic refs (as described above) are used by default.

> But Patrick gives a question here:
>
>> In case the ref ends with a newline, should we check that the next
>> character is `\0`? Otherwise, it may contain multiple lines, which is
>> not allowed for a normal ref.
>>
>> Also, shouldn't the ref always end with a newline?
>
> For symref, I guess we have no spec here. From my experiments, a symref
> could have a newline or no newline, even multiple newlines. And also
> symref could have multiple spaces. But the following is a bad symref
>
>   ref: refs/heads/main garbage
>
> I think we should fully discuss what we should check here. Thus I will
> implement the code.
>

Agreed, in refs/files-backend.c:create_symref_lock, we write symrefs as
"ref: %s\n" so it makes sense to validate that there is nothing extra.

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux