From 612e974ace6b6f9e2666d0305b35fb0cd28ea5e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Geoffrey=20=E2=80=9CFrogeye=E2=80=9D=20Preud=27homme?= Date: Mon, 7 Apr 2025 23:14:37 +0200 Subject: [PATCH] assign{Ips,Macs}: Fix integer overflow Half of SHA256 sums truncated to 16 chars actually go over 2^63, which is beyond the range for hexToDec. This fixes the integer overflow error in Lix 2.91+ and Nix 2.25+, as well as undefined behaviour for versions below --- lib/net.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/net.nix b/lib/net.nix index 3713f09..2432544 100644 --- a/lib/net.nix +++ b/lib/net.nix @@ -230,7 +230,7 @@ in { # Generates a hash (i.e. offset value) for a given hostname hashElem = x: builtins.bitAnd (capacity - 1) - (hexToDec (builtins.substring 0 16 (builtins.hashString "sha256" x))); + (hexToDec (builtins.substring 0 15 (builtins.hashString "sha256" x))); # Do linear probing. Returns the first unused value at or after the given value. probe = avoid: value: if elem value avoid @@ -317,7 +317,7 @@ in { # Generates a hash (i.e. offset value) for a given hostname hashElem = x: builtins.bitAnd (capacity - 1) - (hexToDec (substring 0 16 (builtins.hashString "sha256" x))); + (hexToDec (substring 0 15 (builtins.hashString "sha256" x))); # Do linear probing. Returns the first unused value at or after the given value. probe = avoid: value: if elem value avoid