about summary refs log tree commit diff
path: root/src/libstore
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2019-08-29T13·22+0200
committerGitHub <noreply@github.com>2019-08-29T13·22+0200
commit84de8210040580ce7189332b43038d52c56a9689 (patch)
tree513d9ee70faf7ea4f60a75125f5262a27cc42146 /src/libstore
parent8478c99d09495485683c8442af640231622e9811 (diff)
parent693e68e09c9a17ca72b074bd2e575bf435647b45 (diff)
Merge pull request #3069 from matthewbauer/max-name
Set maximum name length in Nix
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/store-api.cc4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libstore/store-api.cc b/src/libstore/store-api.cc
index f5608d3849f1..3bb9db0b723b 100644
--- a/src/libstore/store-api.cc
+++ b/src/libstore/store-api.cc
@@ -97,6 +97,10 @@ void checkStoreName(const string & name)
        reasons (e.g., "." and ".."). */
     if (string(name, 0, 1) == ".")
         throw Error(baseError % "it is illegal to start the name with a period");
+    /* Disallow names longer than 211 characters. ext4’s max is 256,
+       but we need extra space for the hash and .chroot extensions. */
+    if (name.length() > 211)
+        throw Error(baseError % "name must be less than 212 characters");
     for (auto & i : name)
         if (!((i >= 'A' && i <= 'Z') ||
               (i >= 'a' && i <= 'z') ||