From c77deb9313ee3c4ca9885191f5cb8e07d8d68ad3 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Sun, 17 May 2026 14:28:21 +0200 Subject: Fix undefined behaviour MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- libj2_j2i_mul_ji.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'libj2_j2i_mul_ji.c') diff --git a/libj2_j2i_mul_ji.c b/libj2_j2i_mul_ji.c index 9c7ac3c..67de057 100644 --- a/libj2_j2i_mul_ji.c +++ b/libj2_j2i_mul_ji.c @@ -102,8 +102,12 @@ mul_(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expe t = *a; libj2_j2i_sat_mul_ji(&t, b); - EXPECT(expect_overflow > 0 ? libj2_j2i_is_max(&t) : - expect_overflow ? libj2_j2i_is_min(&t) : libj2_j2i_eq_j2i(&t, expected)); + if (expect_overflow > 0) + EXPECT(libj2_j2i_is_max(&t)); + else if (expect_overflow) + EXPECT(libj2_j2i_is_min(&t)); + else + EXPECT(libj2_j2i_eq_j2i(&t, expected)); t = *a; EXPECT(libj2_j2i_mul_ji_overflow_p((const struct libj2_j2i *)&t, b) == expect_overflow); @@ -195,7 +199,7 @@ static void mul(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expect_overflow) { struct libj2_j2i r, neg_a, e; - struct libj2_j2u u; + struct libj2_j2u u, ue; libj2_minus_j2i_to_j2i(a, &neg_a); libj2_j2i_to_j2u(a, &u); @@ -215,7 +219,8 @@ mul(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expec EXPECT(libj2_j2i_eq_j2i(&r, expected)); - expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b + 1U, (void *)&e); + expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b + 1U, &ue); + libj2_j2u_to_j2i(&ue, &e); if (libj2_j2i_is_negative(&e)) expect_overflow = 1; @@ -229,7 +234,8 @@ mul(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expec libj2_j2u_add_ju(&u, 1U); libj2_j2i_add_ji(&neg_a, -1); - expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b, (void *)&e); + expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b, &ue); + libj2_j2u_to_j2i(&ue, &e); if (libj2_j2i_is_negative(&e)) expect_overflow = 1; @@ -238,7 +244,8 @@ mul(const struct libj2_j2i *a, intmax_t b, struct libj2_j2i *expected, int expec EXPECT(libj2_j2i_eq_j2i(&r, &e)); - expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b + 1U, (void *)&e); + expect_overflow = libj2_j2u_mul_ju_to_j2u_overflow(&u, (uintmax_t)b + 1U, &ue); + libj2_j2u_to_j2i(&ue, &e); if (libj2_j2i_is_negative(&e)) expect_overflow = 1; -- cgit v1.2.3-70-g09d2