From 8232703e20dba5f6aae6a8ee9aa327a3056e4691 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 14 Dec 2025 23:07:19 +0100 Subject: Fix libj2_j2u_add_j2u_overflow_p MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libj2/addition.h | 2 ++ libj2_j2u_add_j2u.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/libj2/addition.h b/libj2/addition.h index 48df7d4..c0fed6e 100644 --- a/libj2/addition.h +++ b/libj2/addition.h @@ -400,6 +400,8 @@ libj2_j2u_add_j2u_overflow_p(const struct libj2_j2u *a, const struct libj2_j2u * return (int)(a->high >> (LIBJ2_JU_BIT - 1U)); else if (libj2_j2u_add_ju_overflow_p(a, b->low)) return 1; + else if (a->low > UINTMAX_MAX - b->low) + return a->high + 1U > UINTMAX_MAX - b->high; else return a->high > UINTMAX_MAX - b->high; } diff --git a/libj2_j2u_add_j2u.c b/libj2_j2u_add_j2u.c index 5f26629..29d2a93 100644 --- a/libj2_j2u_add_j2u.c +++ b/libj2_j2u_add_j2u.c @@ -243,6 +243,10 @@ main(void) check_double(UINTMAX_MAX, random_ju()); } + check_manual(UINTMAX_MAX - 1U, UINTMAX_MAX - 1U, 1, 1, UINTMAX_MAX, UINTMAX_MAX, 0); + check_manual(UINTMAX_MAX - 1U, UINTMAX_MAX - 1U, 1, 2, 0, 0, 1); + check_manual(UINTMAX_MAX - 1U, UINTMAX_MAX - 1U, 1, 3, 0, 1, 1); + return 0; } -- cgit v1.2.3-70-g09d2