From 50a63f8435f03e47aa85136e3145ed58dff65734 Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Sat, 13 Jul 2024 16:24:47 +0200 Subject: [PATCH 1/3] expr: fix a compiler warning about different signs in comparison We know that variable is >=0, so we can just cast it to unsigned. Change-Id: I3792eeb3ca43e6a507cc44c1a70584d42b2acd7b --- src/libexpr/primops.cc | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index 471ddc4f3..c1c606d1d 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -3275,10 +3275,12 @@ static RegisterPrimOp primop_all({ static void prim_genList(EvalState & state, const PosIdx pos, Value * * args, Value & v) { - auto len = state.forceInt(*args[1], pos, "while evaluating the second argument passed to builtins.genList").value; + auto len_ = state.forceInt(*args[1], pos, "while evaluating the second argument passed to builtins.genList").value; - if (len < 0) - state.error("cannot create list of size %1%", len).atPos(pos).debugThrow(); + if (len_ < 0) + state.error("cannot create list of size %1%", len_).atPos(pos).debugThrow(); + + size_t len = len_; // More strict than striclty (!) necessary, but acceptable // as evaluating map without accessing any values makes little sense. From 10cc3b288d0e73a16f5da983c99b8d78f3a7ded1 Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Thu, 18 Jul 2024 19:21:23 +0200 Subject: [PATCH 2/3] Add release notes for removing overflow from Nix language Change-Id: Ib75ab5b8b4d879035d7ee7678f9cd0c491a39c0a --- doc/manual/rl-next/ban-integer-overflow.md | 23 ++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 doc/manual/rl-next/ban-integer-overflow.md diff --git a/doc/manual/rl-next/ban-integer-overflow.md b/doc/manual/rl-next/ban-integer-overflow.md new file mode 100644 index 000000000..d704db651 --- /dev/null +++ b/doc/manual/rl-next/ban-integer-overflow.md @@ -0,0 +1,23 @@ +--- +synopsis: Define integer overflow in the Nix language as an error +issues: [fj#423] +cls: [1594, 1595, 1597, 1609] +category: Fixes +credits: [jade] +--- + +Previously, integer overflow in the Nix language invoked C++ level signed overflow, which was undefined behaviour, but *probably* manifested as wrapping around on overflow. + +Since prior to the public release of Lix, Lix had C++ signed overflow defined to crash the process and nobody noticed this having accidentally removed overflow from the Nix language for three months until it was caught by fiddling around. +Given the significant body of actual Nix code that has been evaluated by Lix in that time, it does not appear that nixpkgs or much of importance depends on integer overflow, so it is safe to turn into an error. + +Some other overflows were fixed: +- `builtins.fromJSON` of values greater than the maximum representable value in a signed 64-bit integer will generate an error. +- `nixConfig` in flakes will no longer accept negative values for configuration options. + +Integer overflow now looks like the following: + +``` +ยป nix eval --expr '9223372036854775807 + 1' +error: integer overflow in adding 9223372036854775807 + 1 +``` From 26e56780caaa3fe23bd1c7589c9ebde220381683 Mon Sep 17 00:00:00 2001 From: Jade Lovelace Date: Thu, 18 Jul 2024 19:35:43 +0200 Subject: [PATCH 3/3] Fixup a bunch of references to nixos.org manuals (plus one reference to CppNix github) Change-Id: Id8b3d2897f3b54e286861805cfd421adc4d5de47 --- doc/manual/src/contributing/testing.md | 1 - misc/systemd/nix-daemon.service.in | 2 +- src/libexpr/eval.cc | 2 +- src/libstore/build/derivation-goal.cc | 2 +- src/libstore/build/worker.cc | 4 ++-- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/doc/manual/src/contributing/testing.md b/doc/manual/src/contributing/testing.md index b6b5318e0..cea6ee3bf 100644 --- a/doc/manual/src/contributing/testing.md +++ b/doc/manual/src/contributing/testing.md @@ -247,7 +247,6 @@ To ensure that characterization testing doesn't make it harder to intentionally The integration tests are defined in the Nix flake under the `hydraJobs.tests` attribute. These tests include everything that needs to interact with external services or run Lix in a non-trivial distributed setup. -Because these tests are expensive and require more than what the standard github-actions setup provides, they only run on the master branch (on ). You can run them manually with `nix build .#hydraJobs.tests.{testName}` or `nix-build -A hydraJobs.tests.{testName}` diff --git a/misc/systemd/nix-daemon.service.in b/misc/systemd/nix-daemon.service.in index 45fbea02c..65356594c 100644 --- a/misc/systemd/nix-daemon.service.in +++ b/misc/systemd/nix-daemon.service.in @@ -1,6 +1,6 @@ [Unit] Description=Nix Daemon -Documentation=man:nix-daemon https://nixos.org/manual +Documentation=man:nix-daemon https://docs.lix.systems/manual/lix/stable RequiresMountsFor=@storedir@ RequiresMountsFor=@localstatedir@ RequiresMountsFor=@localstatedir@/nix/db diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc index 5e6c71e1f..c7b708d1d 100644 --- a/src/libexpr/eval.cc +++ b/src/libexpr/eval.cc @@ -1901,7 +1901,7 @@ void EvalState::autoCallFunction(Bindings & args, Value & fun, Value & res) Nix attempted to evaluate a function as a top level expression; in this case it must have its arguments supplied either by default values, or passed explicitly with '--arg' or '--argstr'. See -https://nixos.org/manual/nix/stable/language/constructs.html#functions.)", symbols[i.name]) +https://docs.lix.systems/manual/lix/stable/language/constructs.html#functions)", symbols[i.name]) .atPos(i.pos).withFrame(*fun.lambda.env, *fun.lambda.fun).debugThrow(); } } diff --git a/src/libstore/build/derivation-goal.cc b/src/libstore/build/derivation-goal.cc index ef16cd011..6d86a44d0 100644 --- a/src/libstore/build/derivation-goal.cc +++ b/src/libstore/build/derivation-goal.cc @@ -781,7 +781,7 @@ void DerivationGoal::tryLocalBuild() { throw Error( "unable to build with a primary store that isn't a local store; " "either pass a different '--store' or enable remote builds." - "\nhttps://nixos.org/manual/nix/stable/advanced-topics/distributed-builds.html"); + "\nhttps://docs.lix.systems/manual/lix/stable/advanced-topics/distributed-builds.html"); } diff --git a/src/libstore/build/worker.cc b/src/libstore/build/worker.cc index e3fec292a..39bcd5d92 100644 --- a/src/libstore/build/worker.cc +++ b/src/libstore/build/worker.cc @@ -333,11 +333,11 @@ void Worker::run(const Goals & _topGoals) if (getMachines().empty()) throw Error("unable to start any build; either increase '--max-jobs' " "or enable remote builds." - "\nhttps://nixos.org/manual/nix/stable/advanced-topics/distributed-builds.html"); + "\nhttps://docs.lix.systems/manual/lix/stable/advanced-topics/distributed-builds.html"); else throw Error("unable to start any build; remote machines may not have " "all required system features." - "\nhttps://nixos.org/manual/nix/stable/advanced-topics/distributed-builds.html"); + "\nhttps://docs.lix.systems/manual/lix/stable/advanced-topics/distributed-builds.html"); } assert(!awake.empty());