getDerivations(): Filter out packages with bad derivation names

In particular, this disallows attribute names containing dots or
starting with dots. Hydra already disallowed these. This affects the
following packages in Nixpkgs master:

  2048-in-terminal
  2bwm
  389-ds-base
  90secondportraits
  lispPackages.3bmd
  lispPackages.hu.dwim.asdf
  lispPackages.hu.dwim.def

Closes #1342.
This commit is contained in:
Eelco Dolstra 2017-04-19 14:18:26 +02:00
parent 62a07992bd
commit b0cb117226
No known key found for this signature in database
GPG key ID: 8170B4726D7198DE

View file

@ -3,6 +3,7 @@
#include "eval-inline.hh" #include "eval-inline.hh"
#include <cstring> #include <cstring>
#include <regex>
namespace nix { namespace nix {
@ -262,6 +263,9 @@ static string addToPath(const string & s1, const string & s2)
} }
static std::regex attrRegex("[A-Za-z_][A-Za-z0-9-_+]*");
static void getDerivations(EvalState & state, Value & vIn, static void getDerivations(EvalState & state, Value & vIn,
const string & pathPrefix, Bindings & autoArgs, const string & pathPrefix, Bindings & autoArgs,
DrvInfos & drvs, Done & done, DrvInfos & drvs, Done & done,
@ -286,6 +290,8 @@ static void getDerivations(EvalState & state, Value & vIn,
precedence). */ precedence). */
for (auto & i : v.attrs->lexicographicOrder()) { for (auto & i : v.attrs->lexicographicOrder()) {
Activity act(*logger, lvlDebug, format("evaluating attribute %1%") % i->name); Activity act(*logger, lvlDebug, format("evaluating attribute %1%") % i->name);
if (!std::regex_match(std::string(i->name), attrRegex))
continue;
string pathPrefix2 = addToPath(pathPrefix, i->name); string pathPrefix2 = addToPath(pathPrefix, i->name);
if (combineChannels) if (combineChannels)
getDerivations(state, *i->value, pathPrefix2, autoArgs, drvs, done, ignoreAssertionFailures); getDerivations(state, *i->value, pathPrefix2, autoArgs, drvs, done, ignoreAssertionFailures);