From: Adhemerval Zanella Date: Mon, 5 May 2025 15:22:54 +0000 (-0300) Subject: math: Fix UB in flt-32 and dbl-64 significand X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b91a1355001faa6b42c6a0361e420ba70a3d0412;p=thirdparty%2Fglibc.git math: Fix UB in flt-32 and dbl-64 significand On x86_64: $ math/test-float-significand testing float (without inline functions) UBSAN: Undefined behaviour in ./s_significand_template.c:31:45 negation of 2147483648 cannot be represented in type 'int' --- diff --git a/math/s_significand_template.c b/math/s_significand_template.c index d00b0525e4..6a0e3faa70 100644 --- a/math/s_significand_template.c +++ b/math/s_significand_template.c @@ -28,7 +28,8 @@ FLOAT M_DECL_FUNC (__significand) (FLOAT x) { - return M_SUF (__ieee754_scalb) (x,(FLOAT) - M_SUF (__ilogb) (x)); + int ex = - (unsigned int) M_SUF (__ilogb) (x); + return M_SUF (__ieee754_scalb) (x,(FLOAT) ex); } /* Don't provide _FloatN aliases for significand which was originally