aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2025-12-14 23:07:19 +0100
committerMattias Andrée <m@maandree.se>2025-12-14 23:07:19 +0100
commit8232703e20dba5f6aae6a8ee9aa327a3056e4691 (patch)
tree37ad51c4c426c7f5f79145ee300cd36b013a9f5e
parentAdd man page aliases for enum values (diff)
downloadlibj2-8232703e20dba5f6aae6a8ee9aa327a3056e4691.tar.gz
libj2-8232703e20dba5f6aae6a8ee9aa327a3056e4691.tar.bz2
libj2-8232703e20dba5f6aae6a8ee9aa327a3056e4691.tar.xz
Fix libj2_j2u_add_j2u_overflow_pHEADmaster
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r--libj2/addition.h2
-rw-r--r--libj2_j2u_add_j2u.c4
2 files changed, 6 insertions, 0 deletions
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;
}