math: fix undefined shift in logf
authorSzabolcs Nagy <nsz@port70.net>
Fri, 20 Jan 2023 10:37:39 +0000 (11:37 +0100)
committerRich Felker <dalias@aerifal.cx>
Sun, 12 Feb 2023 22:46:50 +0000 (17:46 -0500)
A signed int shift overflowed when computing a constant mask, use hex
literal instead.  This is unlikely to cause actual issues unless the
code was compiled with ubsan or similar instrumentation specifically
to catch this. The stripped libc.so is unchanged on x86_64.
Reported by q66 on irc.

src/math/logf.c

index 7ee5d7f..e4c2237 100644 (file)
@@ -53,7 +53,7 @@ float logf(float x)
        tmp = ix - OFF;
        i = (tmp >> (23 - LOGF_TABLE_BITS)) % N;
        k = (int32_t)tmp >> 23; /* arithmetic shift */
-       iz = ix - (tmp & 0x1ff << 23);
+       iz = ix - (tmp & 0xff800000);
        invc = T[i].invc;
        logc = T[i].logc;
        z = (double_t)asfloat(iz);