From c1eb458d6b9f6e1c4fa9ce0ae0c91f0314ca94ac Mon Sep 17 00:00:00 2001 From: Pip Cet Date: Mon, 25 May 2026 11:28:38 +0000 Subject: [PATCH] Avoid relying on FOR_EACH_TAIL internals in 'Fnthcdr' (bug#81115) The new FOR_EACH_TAIL code detects simple cycles sooner than the old code did, leading to integer overflows. * src/fns.c (Fnthcdr): Avoid integer overflow if cycle is detected early. --- src/fns.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/fns.c b/src/fns.c index d692a92580a..4284d82d6a5 100644 --- a/src/fns.c +++ b/src/fns.c @@ -1824,7 +1824,10 @@ DEFUN ("nthcdr", Fnthcdr, Snthcdr, 2, 2, 0, mpz_export (&iz, NULL, -1, sizeof iz, 0, 0, mpz[0]); num += iz; } - num += cycle_length - large_num % cycle_length; + if (num < cycle_length) + num += cycle_length; + num -= large_num % cycle_length; + eassume (num >= 0); } num %= cycle_length;