* `nix-env -e' corrupts memory due to incorrect use of iterators.

Reported by Rob Vermaas.
This commit is contained in:
Eelco Dolstra 2005-09-01 18:14:04 +00:00
parent e1a6fb7870
commit 2bcd65ecf6
1 changed files with 6 additions and 2 deletions

View File

@ -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);
}