mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-23 21:17:11 -05:00
daemon: Improve error message for wrong hash sizes.
* nix/libutil/hash.cc (parseHash): Show the hash algorithm name and expected size in the error message. * tests/derivations.scm ("fixed-output derivation, invalid hash size"): New test.
This commit is contained in:
parent
5d24e57a61
commit
407175a1d0
2 changed files with 17 additions and 2 deletions
|
@ -76,8 +76,11 @@ string printHash(const Hash & hash)
|
|||
Hash parseHash(HashType ht, const string & s)
|
||||
{
|
||||
Hash hash(ht);
|
||||
if (s.length() != hash.hashSize * 2)
|
||||
throw Error(format("invalid hash `%1%'") % s);
|
||||
if (s.length() != hash.hashSize * 2) {
|
||||
string algo = gcry_md_algo_name(ht);
|
||||
throw Error(format("invalid %1% hash '%2%' (%3% bytes but expected %4%)")
|
||||
% algo % s % (s.length() / 2) % hash.hashSize);
|
||||
}
|
||||
for (unsigned int i = 0; i < hash.hashSize; i++) {
|
||||
string s2(s, i * 2, 2);
|
||||
if (!isxdigit(s2[0]) || !isxdigit(s2[1]))
|
||||
|
|
|
@ -396,6 +396,18 @@ (define prefix-len (string-length dir))
|
|||
(call-with-input-file p get-bytevector-all))
|
||||
(bytevector? (query-path-hash %store p)))))))
|
||||
|
||||
(test-assert "fixed-output derivation, invalid hash size"
|
||||
(guard (c ((store-protocol-error? c)
|
||||
(string-contains-ci (store-protocol-error-message c)
|
||||
"invalid SHA512 hash")))
|
||||
(derivation %store "download-with-invalid-hash"
|
||||
"builtin:download" '()
|
||||
#:env-vars `(("url"
|
||||
. ,(object->string "http://example.org")))
|
||||
#:hash-algo 'sha512
|
||||
#:hash #vu8(1 2 3))
|
||||
#f))
|
||||
|
||||
(test-assert "derivation with a fixed-output input"
|
||||
;; A derivation D using a fixed-output derivation F doesn't has the same
|
||||
;; output path when passed F or F', as long as F and F' have the same output
|
||||
|
|
Loading…
Reference in a new issue