mirror of
https://github.com/NixOS/nix
synced 2025-07-03 06:11:46 +02:00
libutil: handle json builder log messages with unexpected format
Before this change, expressions like:
with import <nixpkgs> {};
runCommand "foo" {} ''
echo '@nix {}' >&$NIX_LOG_FD
''
would result in Lix crashing, because accessing nonexistent fields of
a JSON object throws an exception.
Rather than handling each field individually, we just catch JSON
exceptions wholesale. Since these log messages are an unusual
circumstance, log a warning when this happens.
Fixes #544.
Change-Id: Idc2d8acf6e37046b3ec212f42e29269163dca893
(cherry picked from commit e55cd3beea710db727fd966f265a1b715b7285f3)
(cherry picked from commit ee03fd478e
)
This commit is contained in:
parent
3cd4e9de1e
commit
9fed865d1d
2 changed files with 50 additions and 29 deletions
|
@ -299,6 +299,7 @@ bool handleJSONLogMessage(nlohmann::json & json,
|
|||
const Activity & act, std::map<ActivityId, Activity> & activities,
|
||||
bool trusted)
|
||||
{
|
||||
try {
|
||||
std::string action = json["action"];
|
||||
|
||||
if (action == "start") {
|
||||
|
@ -330,6 +331,13 @@ bool handleJSONLogMessage(nlohmann::json & json,
|
|||
}
|
||||
|
||||
return true;
|
||||
} catch (const nlohmann::json::exception &e) {
|
||||
warn(
|
||||
"warning: Unable to handle a JSON message from the builder: %s",
|
||||
e.what()
|
||||
);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool handleJSONLogMessage(const std::string & msg,
|
||||
|
|
|
@ -33,6 +33,18 @@ let
|
|||
outputHash = "1dq9p0hnm1y75q2x40fws5887bq1r840hzdxak0a9djbwvx0b16d";
|
||||
};
|
||||
|
||||
unusual-logging = mkDerivation {
|
||||
name = "unusual-logging";
|
||||
buildCommand = ''
|
||||
{
|
||||
echo "@nix 1"
|
||||
echo "@nix {}"
|
||||
echo '@nix {"action": null}'
|
||||
} >&$NIX_LOG_FD
|
||||
touch $out
|
||||
'';
|
||||
};
|
||||
|
||||
in
|
||||
mkDerivation {
|
||||
name = "dependencies-top";
|
||||
|
@ -42,6 +54,7 @@ mkDerivation {
|
|||
input1_drv = input1;
|
||||
input2_drv = input2;
|
||||
input0_drv = input0;
|
||||
unusual_logging_drv = unusual-logging;
|
||||
fod_input_drv = fod_input;
|
||||
meta.description = "Random test package";
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue