diff options
| author | Mattias Andrée <m@maandree.se> | 2026-05-17 14:28:21 +0200 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-05-17 15:06:44 +0200 |
| commit | c77deb9313ee3c4ca9885191f5cb8e07d8d68ad3 (patch) | |
| tree | 1de53628d7bffdac84992d8ae1e36d4bf0265c90 /libj2_j2i_mul_ji.c | |
| parent | Fix usage of va_arg (diff) | |
| download | libj2-c77deb9313ee3c4ca9885191f5cb8e07d8d68ad3.tar.gz libj2-c77deb9313ee3c4ca9885191f5cb8e07d8d68ad3.tar.bz2 libj2-c77deb9313ee3c4ca9885191f5cb8e07d8d68ad3.tar.xz | |
Fix undefined behaviour
Signed-off-by: Mattias Andrée <m@maandree.se>
Diffstat (limited to 'libj2_j2i_mul_ji.c')
| -rw-r--r-- | libj2_j2i_mul_ji.c | 19 |
1 files changed, 13 insertions, 6 deletions
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; |
