diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-09-20 16:15:32 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2006-09-20 16:15:32 +0000 |
commit | 0623359fbc67c421bf76b7433f92c7ef58050321 (patch) | |
tree | b0621f97bbbea2ae2ad69a89284454aa1f0c85c0 /src/libexpr | |
parent | 22d13d6ec27b02f98ca4e398fbae4f3273e97794 (diff) |
* Print a better error message for wrong hashes (NIX-49).
Diffstat (limited to 'src/libexpr')
-rw-r--r-- | src/libexpr/primops.cc | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 3f915fc23..c04d41bf4 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -353,13 +353,16 @@ static Expr primDerivationStrict(EvalState & state, const ATermVector & args) HashType ht = parseHashType(outputHashAlgo); if (ht == htUnknown) throw EvalError(format("unknown hash algorithm `%1%'") % outputHashAlgo); - Hash h; - if (outputHash.size() == Hash(ht).hashSize * 2) + Hash h(ht); + if (outputHash.size() == h.hashSize * 2) /* hexadecimal representation */ h = parseHash(ht, outputHash); - else + else if (outputHash.size() == hashLength32(h)) /* base-32 representation */ h = parseHash32(ht, outputHash); + else + throw Error(format("hash `%1%' has wrong length for hash type `%2%'") + % outputHash % outputHashAlgo); string s = outputHash; outputHash = printHash(h); if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo; |