]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Fix UB on cbrtf (BZ 32922)
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Fri, 25 Apr 2025 20:54:26 +0000 (17:54 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 29 Apr 2025 18:20:10 +0000 (15:20 -0300)
The left shift overflows for 'int64_t', use unsigned instead.  It syncs
with CORE-MATH commit f7c7408d1749ec2859ea249495af699359ae559b.

Checked on aarch64-linux-gnu, x86_64-linux-gnu, and i686-linux-gnu.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
sysdeps/ieee754/flt-32/s_cbrtf.c

index 5a7a9a952d1692fd2c12120350acac939db375f5..df9e888c1f72ae0bb14500c8e255bd5f79fe8d5b 100644 (file)
@@ -3,7 +3,7 @@
 Copyright (c) 2023, 2024 Alexei Sibidanov.
 
 The original version of this file was copied from the CORE-MATH
-project (file src/binary32/cbrt/cbrtf.c, revision bc385c2).
+project (file src/binary32/cbrt/cbrtf.c, revision f7c7408d).
 
 Permission is hereby granted, free of charge, to any person obtaining a copy
 of this software and associated documentation files (the "Software"), to deal
@@ -61,8 +61,8 @@ __cbrtf (float x)
   e += 899;
   uint32_t et = e / 3, it = e % 3;
   uint64_t isc = escale[it].u;
-  isc += (int64_t) (et - 342) << 52;
-  isc |= (int64_t) sgn << 63;
+  isc += (uint64_t) (et - 342) << 52;
+  isc |= (uint64_t) sgn << 63;
   double cvt2 = asdouble (isc);
   static const double c[] =
     {