diff options
author | Delan Azabani <delan@azabani.com> | 2024-06-22 23:00:59 +0800 |
---|---|---|
committer | Delan Azabani <delan@azabani.com> | 2024-06-29 05:11:31 +0000 |
commit | b2944d93a6d95810f0aef09e9ac44b95e2712554 (patch) | |
tree | 90a3c92b959aa27b742c7b6423c0337dd8a5f869 /src/libexpr/flake | |
parent | 5dc85e8b72d1ba433f69200537146275ff1c4a03 (diff) |
Reject fully-qualified URLs in 'from' argument of `nix registry add`
We previously allowed you to map any flake URL to any other flake URL,
including shorthand flakerefs, indirect flake URLs like `flake:nixpkgs`,
direct flake URLs like `github:NixOS/nixpkgs`, or local paths.
But flake registry entries mapping from direct flake URLs often come
from swapping the 'from' and 'to' arguments by accident, and even when
created intentionally, they may not actually work correctly.
This patch rejects those URLs (and fully-qualified flake: URLs), making
it harder to swap the arguments by accident.
Fixes #181.
Change-Id: I24713643a534166c052719b8770a4edfcfdb8cf3
Diffstat (limited to 'src/libexpr/flake')
-rw-r--r-- | src/libexpr/flake/flakeref.cc | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/libexpr/flake/flakeref.cc b/src/libexpr/flake/flakeref.cc index 1c90bfc43..a95df04ba 100644 --- a/src/libexpr/flake/flakeref.cc +++ b/src/libexpr/flake/flakeref.cc @@ -85,8 +85,8 @@ std::pair<FlakeRef, std::string> parseFlakeRefWithFragment( + "(?:#(" + queryRegex + "))?", std::regex::ECMAScript); - static std::regex flakeRegex( - "((" + flakeIdRegexS + ")(?:/(?:" + refAndOrRevRegex + "))?)" + static std::regex flakeShorthandRegex( + flakeShorthandRegexS + "(?:#(" + queryRegex + "))?", std::regex::ECMAScript); @@ -95,7 +95,7 @@ std::pair<FlakeRef, std::string> parseFlakeRefWithFragment( /* Check if 'url' is a flake ID. This is an abbreviated syntax for 'flake:<flake-id>?ref=<ref>&rev=<rev>'. */ - if (std::regex_match(url, match, flakeRegex)) { + if (std::regex_match(url, match, flakeShorthandRegex)) { auto parsedURL = ParsedURL{ .url = url, .base = "flake:" + match.str(1), |