From b91a1355001faa6b42c6a0361e420ba70a3d0412 Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Mon, 5 May 2025 12:22:54 -0300 Subject: [PATCH] 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' --- math/s_significand_template.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 -- 2.47.2