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:
		
							parent
							
								
									62a07992bd
								
							
						
					
					
						commit
						b0cb117226
					
				
					 1 changed files with 6 additions and 0 deletions
				
			
		|  | @ -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); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue