Skip to content

Commit

Permalink
Merge pull request #9122 from NixOS/backport-9095-to-2.18-maintenance
Browse files Browse the repository at this point in the history
[Backport 2.18-maintenance] StorePath: reject names starting with '.'
  • Loading branch information
Ericson2314 authored Oct 9, 2023
2 parents f5f4de6 + 8204066 commit 78fd621
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 3 deletions.
2 changes: 1 addition & 1 deletion src/libstore/path-regex.hh
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@

namespace nix {

static constexpr std::string_view nameRegexStr = R"([0-9a-zA-Z\+\-\._\?=]+)";
static constexpr std::string_view nameRegexStr = R"([0-9a-zA-Z\+\-_\?=][0-9a-zA-Z\+\-\._\?=]*)";

}
2 changes: 2 additions & 0 deletions src/libstore/path.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ static void checkName(std::string_view path, std::string_view name)
if (name.size() > StorePath::MaxPathLen)
throw BadStorePath("store path '%s' has a name longer than %d characters",
path, StorePath::MaxPathLen);
if (name[0] == '.')
throw BadStorePath("store path '%s' starts with illegal character '.'", path);
// See nameRegexStr for the definition
for (auto c : name)
if (!((c >= '0' && c <= '9')
Expand Down
9 changes: 7 additions & 2 deletions src/libstore/tests/path.cc
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ TEST_DONT_PARSE(double_star, "**")
TEST_DONT_PARSE(star_first, "*,foo")
TEST_DONT_PARSE(star_second, "foo,*")
TEST_DONT_PARSE(bang, "foo!o")
TEST_DONT_PARSE(dotfile, ".gitignore")

#undef TEST_DONT_PARSE

Expand Down Expand Up @@ -101,8 +102,12 @@ Gen<StorePathName> Arbitrary<StorePathName>::arbitrary()
pre += '-';
break;
case 64:
pre += '.';
break;
// names aren't permitted to start with a period,
// so just fall through to the next case here
if (c != 0) {
pre += '.';
break;
}
case 65:
pre += '_';
break;
Expand Down

0 comments on commit 78fd621

Please sign in to comment.