diff options
author | Nikola Knezevic <nikola@knezevic.ch> | 2020-05-30 12:29:35 +0200 |
---|---|---|
committer | Nikola Knezevic <nikola@knezevic.ch> | 2020-05-30 12:29:35 +0200 |
commit | 77007d4eabcf7090d1d3fbbdf84a67fb2262cf78 (patch) | |
tree | 9425b3eea2f7c0557db09380a9fed7e848f6e228 /src/libfetchers | |
parent | f60ce4fa207a210e23a1142d3a8ead611526e6e1 (diff) |
Improve ref validity checking in fetchGit
The previous regex was too strict and did not match what git was allowing. It
could lead to `fetchGit` not accepting valid branch names, even though they
exist in a repository (for example, branch names containing `/`, which are
pretty standard, like `release/1.0` branches).
The new regex defines what a branch name should **NOT** contain. It takes the
definitions from `refs.c` in https://github.com/git/git and `git help
check-ref-format` pages.
This change also introduces a test for ref name validity checking, which
compares the result from Nix with the result of `git check-ref-format --branch`.
Diffstat (limited to 'src/libfetchers')
-rw-r--r-- | src/libfetchers/git.cc | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/libfetchers/git.cc b/src/libfetchers/git.cc index 17cc60228..e069057eb 100644 --- a/src/libfetchers/git.cc +++ b/src/libfetchers/git.cc @@ -418,7 +418,7 @@ struct GitInputScheme : InputScheme auto input = std::make_unique<GitInput>(parseURL(getStrAttr(attrs, "url"))); if (auto ref = maybeGetStrAttr(attrs, "ref")) { - if (!std::regex_match(*ref, refRegex)) + if (std::regex_search(*ref, badGitRefRegex)) throw BadURL("invalid Git branch/tag name '%s'", *ref); input->ref = *ref; } |