shejialuo <shejialuo@xxxxxxxxx> writes: > We have code that checks regular ref contents, but we do not yet check > the contents of symbolic refs. By using "parse_loose_ref_content" for > symbolic refs, we will get the information of the "referent". > > We do not need to check the "referent" by opening the file. This is > because if "referent" exists in the file system, we will eventually > check its correctness by inspecting every file in the "refs" directory. > If the "referent" does not exist in the filesystem, this is OK as it is > seen as the dangling symref. > > So we just need to check the "referent" string content. A regular could seems like we're missing the noun here, a regular what? > be accepted as a textual symref if it begins with "ref:", followed by > zero or more whitespaces, followed by the full refname, followed only by > whitespace characters. However, we always write a single SP after "ref:" > and a single LF after the refname. It may seem that we should report a > fsck error message when the "referent" does not apply above rules and we > should not be so aggressive because third-party reimplementations of Git > may have taken advantage of the looser syntax. Put it more specific, we > accept the following "referent": > > 1. "ref: refs/heads/master " > 2. "ref: refs/heads/master \n \n" > 3. "ref: refs/heads/master\n\n" > > When introducing the regular ref content checks, we created a new fsck > message "unofficialFormattedRef" which exactly represents above > situation. So we will reuse this fsck message to write checks to info > the user about these situations. > Plus to what Patrick said in the previous commit, it would be nice to separate these issues with different message IDs. > But we do not allow any other trailing garbage. The followings are bad > symref contents which will be reported as fsck error by "git-fsck(1)". > > 1. "ref: refs/heads/master garbage\n" > 2. "ref: refs/heads/master \n\n\n garbage " > > And we introduce a new "badReferent(ERROR)" fsck message to report above > errors by using "ref.c::check_refname_format". But we cannot just pass > the "referent" to this function because the "referent" might contain > some whitespaces which will cause "check_refname_format" failing. > It would be nice if you could elaborate here, or rather restructure to say something like.. Since 'check_refname_format' doesn't work with whitespaces, we use the trimmed version of 'referent' with the function. [snip]
Attachment:
signature.asc
Description: PGP signature