Skip to content

Commit

Permalink
nix run: Fix segfault on macOS
Browse files Browse the repository at this point in the history
Note that clearenv() is not available on macOS.

Fixes #1907.
  • Loading branch information
edolstra committed Feb 26, 2018
1 parent 9432f3f commit 24ec750
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 3 deletions.
7 changes: 7 additions & 0 deletions src/libutil/util.cc
Expand Up @@ -73,6 +73,13 @@ std::map<std::string, std::string> getEnv()
}


void clearEnv()
{
for (auto & name : getEnv())
unsetenv(name.first.c_str());
}


Path absPath(Path path, Path dir)
{
if (path[0] != '/') {
Expand Down
3 changes: 3 additions & 0 deletions src/libutil/util.hh
Expand Up @@ -32,6 +32,9 @@ string getEnv(const string & key, const string & def = "");
/* Get the entire environment. */
std::map<std::string, std::string> getEnv();

/* Clear the environment. */
void clearEnv();

/* Return an absolutized path, resolving paths relative to the
specified directory, or the current directory otherwise. The path
is also canonicalised. */
Expand Down
4 changes: 1 addition & 3 deletions src/nix/run.cc
Expand Up @@ -16,8 +16,6 @@ using namespace nix;

std::string chrootHelperName = "__run_in_chroot";

extern char * * environ;

struct CmdRun : InstallablesCommand
{
std::vector<std::string> command = { "bash" };
Expand Down Expand Up @@ -109,7 +107,7 @@ struct CmdRun : InstallablesCommand
if (s) kept[var] = s;
}

environ = nullptr;
clearEnv();

for (auto & var : kept)
setenv(var.first.c_str(), var.second.c_str(), 1);
Expand Down

0 comments on commit 24ec750

Please sign in to comment.