* `nix-env -e' corrupts memory due to incorrect use of iterators.
Reported by Rob Vermaas.
This commit is contained in:
		
							parent
							
								
									e1a6fb7870
								
							
						
					
					
						commit
						2bcd65ecf6
					
				
					 1 changed files with 6 additions and 2 deletions
				
			
		|  | @ -584,23 +584,27 @@ static void uninstallDerivations(Globals & globals, DrvNames & selectors, | |||
|     Path & profile) | ||||
| { | ||||
|     UserEnvElems installedElems = queryInstalled(globals.state, profile); | ||||
|     UserEnvElems newElems; | ||||
| 
 | ||||
|     for (UserEnvElems::iterator i = installedElems.begin(); | ||||
|          i != installedElems.end(); ++i) | ||||
|     { | ||||
|         DrvName drvName(i->second.name); | ||||
|         bool found = false; | ||||
|         for (DrvNames::iterator j = selectors.begin(); | ||||
|              j != selectors.end(); ++j) | ||||
|             if (j->matches(drvName)) { | ||||
|                 printMsg(lvlInfo, | ||||
|                     format("uninstalling `%1%'") % i->second.name); | ||||
|                 installedElems.erase(i); | ||||
|                 found = true; | ||||
|                 break; | ||||
|             } | ||||
|         if (!found) newElems.insert(*i); | ||||
|     } | ||||
| 
 | ||||
|     if (globals.dryRun) return; | ||||
| 
 | ||||
|     createUserEnv(globals.state, installedElems, | ||||
|     createUserEnv(globals.state, newElems, | ||||
|         profile, globals.keepDerivations); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue