aboutsummaryrefslogtreecommitdiff
path: root/src/libstore/path.cc
diff options
context:
space:
mode:
authorQyriad <qyriad@qyriad.me>2024-04-10 18:37:34 -0600
committerQyriad <qyriad@qyriad.me>2024-04-14 21:08:07 +0000
commit80bbfe20342be13a7320bc5ae5694e3454b61dbb (patch)
tree2524d331ee0d439ee2c160cba49123d73000c379 /src/libstore/path.cc
parentddb4d3fa4c531a788d34aa5abdf070f6845b555e (diff)
don't throw an exception for the trivial case of isStorePath()...
Previously if isStorePath() was called on anything other than a top-level /nix/store/some-path, it would throw a BadStorePath exception. This commit duplicates the absolutely trivial check, into maybeParseStorePath(), and leaves exception throwing to parseStorePath(), the function that assumes you're already giving a valid path instead of the one whose purpose is to check if its valid or not... Change-Id: I8dda548f0f88d14ca8c3ee927d64e0ec0681fc7b
Diffstat (limited to 'src/libstore/path.cc')
-rw-r--r--src/libstore/path.cc5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/libstore/path.cc b/src/libstore/path.cc
index c896ff927..2f929b7b3 100644
--- a/src/libstore/path.cc
+++ b/src/libstore/path.cc
@@ -64,6 +64,11 @@ StorePath Store::parseStorePath(std::string_view path) const
std::optional<StorePath> Store::maybeParseStorePath(std::string_view path) const
{
+ // If it's not an absolute path, or if the dirname of the path isn't /nix/store
+ // (or whatever our storeDir is), then it can't be a store path.
+ if ((path.size() > 0 && path[0] != '/') || dirOf(canonPath(path)) != this->storeDir) {
+ return std::nullopt;
+ }
try {
return parseStorePath(path);
} catch (Error &) {