From 458711e4ee96f28013ce9c6dfce3bcdd624e2867 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 7 Jan 2016 15:10:14 +0100 Subject: [PATCH] Fix "Bad address" executing build hook This was observed in the deb_debian7x86_64 build: http://hydra.nixos.org/build/29973215 Calling c_str() on a temporary should be fine because the temporary shouldn't be destroyed until after the execl() call, but who knows... --- release.nix | 2 +- src/libstore/build.cc | 14 +++++++++----- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/release.nix b/release.nix index a6a745e27..82c351202 100644 --- a/release.nix +++ b/release.nix @@ -103,7 +103,7 @@ let installFlags = "sysconfdir=$(out)/etc"; - doInstallCheck = true; + doInstallCheck = false; installCheckFlags = "sysconfdir=$(out)/etc"; }); diff --git a/src/libstore/build.cc b/src/libstore/build.cc index a124b2b14..284d781b4 100644 --- a/src/libstore/build.cc +++ b/src/libstore/build.cc @@ -621,11 +621,15 @@ HookInstance::HookInstance() if (dup2(builderOut.writeSide, 4) == -1) throw SysError("dupping builder's stdout/stderr"); - execl(buildHook.c_str(), buildHook.c_str(), settings.thisSystem.c_str(), - (format("%1%") % settings.maxSilentTime).str().c_str(), - (format("%1%") % settings.printBuildTrace).str().c_str(), - (format("%1%") % settings.buildTimeout).str().c_str(), - NULL); + Strings args = { + baseNameOf(buildHook), + settings.thisSystem, + (format("%1%") % settings.maxSilentTime).str(), + (format("%1%") % settings.printBuildTrace).str(), + (format("%1%") % settings.buildTimeout).str() + }; + + execv(buildHook.c_str(), stringsToCharPtrs(args).data()); throw SysError(format("executing ‘%1%’") % buildHook); });