aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/build.cc12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/libstore/build.cc b/src/libstore/build.cc
index 9bcf336a4..1789eeda2 100644
--- a/src/libstore/build.cc
+++ b/src/libstore/build.cc
@@ -1411,11 +1411,19 @@ void DerivationGoal::startBuilder()
throw BuildError(format("odd number of tokens in `exportReferencesGraph': `%1%'") % s);
for (Strings::iterator i = ss.begin(); i != ss.end(); ) {
string fileName = *i++;
+ checkStoreName(fileName); /* !!! abuse of this function */
+
+ /* Check that the store path is valid. */
Path storePath = *i++;
+ if (!isInStore(storePath))
+ throw BuildError(format("`exportReferencesGraph' contains a non-store path `%1%'")
+ % storePath);
+ storePath = toStorePath(storePath);
if (!store->isValidPath(storePath))
- throw BuildError(format("`exportReferencesGraph' refers to an invalid path `%1%'")
+ throw BuildError(format("`exportReferencesGraph' contains an invalid path `%1%'")
% storePath);
- checkStoreName(fileName); /* !!! abuse of this function */
+
+ /* Write closure info to `fileName'. */
PathSet refs;
computeFSClosure(storePath, refs);
/* !!! in secure Nix, the writing should be done on the