about summary refs log tree commit diff
path: root/src/libexpr/primops.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2006-09-20T16·15+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2006-09-20T16·15+0000
commit0623359fbc67c421bf76b7433f92c7ef58050321 (patch)
treeb0621f97bbbea2ae2ad69a89284454aa1f0c85c0 /src/libexpr/primops.cc
parent22d13d6ec27b02f98ca4e398fbae4f3273e97794 (diff)
* Print a better error message for wrong hashes (NIX-49).
Diffstat (limited to 'src/libexpr/primops.cc')
-rw-r--r--src/libexpr/primops.cc9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 3f915fc232..c04d41bf4d 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;