Disallow outputHash being null or an empty string

Fixes #1384.
This commit is contained in:
Eelco Dolstra 2017-05-15 18:44:58 +02:00
parent a2d92bb20e
commit c05d9ae7a5
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -534,7 +534,8 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
PathSet context;
string outputHash, outputHashAlgo;
std::experimental::optional<std::string> outputHash;
std::string outputHashAlgo;
bool outputHashRecursive = false;
StringSet outputs;
@ -703,7 +704,7 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
throw EvalError(format("derivation names are not allowed to end in %1%, at %2%")
% drvExtension % posDrvName);
if (outputHash != "") {
if (outputHash) {
/* Handle fixed-output derivations. */
if (outputs.size() != 1 || *(outputs.begin()) != "out")
throw Error(format("multiple outputs are not supported in fixed-output derivations, at %1%") % posDrvName);
@ -711,13 +712,13 @@ static void prim_derivationStrict(EvalState & state, const Pos & pos, Value * *
HashType ht = parseHashType(outputHashAlgo);
if (ht == htUnknown)
throw EvalError(format("unknown hash algorithm %1%, at %2%") % outputHashAlgo % posDrvName);
Hash h = parseHash16or32(ht, outputHash);
Hash h = parseHash16or32(ht, *outputHash);
outputHash = printHash(h);
if (outputHashRecursive) outputHashAlgo = "r:" + outputHashAlgo;
Path outPath = state.store->makeFixedOutputPath(outputHashRecursive, h, drvName);
drv.env["out"] = outPath;
drv.outputs["out"] = DerivationOutput(outPath, outputHashAlgo, outputHash);
drv.outputs["out"] = DerivationOutput(outPath, outputHashAlgo, *outputHash);
}
else {