[Bf-blender-cvs] [dda0de4a3d0] master: Fix address sanitizer overflow warnings for bit manipulation functions

Brecht Van Lommel noreply at git.blender.org
Fri Aug 2 17:26:23 CEST 2019


Commit: dda0de4a3d09e8aed93718491f7dfb9366e8efd5
Author: Brecht Van Lommel
Date:   Fri Aug 2 15:46:36 2019 +0200
Branches: master
https://developer.blender.org/rBdda0de4a3d09e8aed93718491f7dfb9366e8efd5

Fix address sanitizer overflow warnings for bit manipulation functions

Perform with unsigned int instead of signed int.

Differential Revision: https://developer.blender.org/D5402

===================================================================

M	source/blender/blenlib/intern/math_bits_inline.c

===================================================================

diff --git a/source/blender/blenlib/intern/math_bits_inline.c b/source/blender/blenlib/intern/math_bits_inline.c
index ec2408e30a1..a6883c2aaba 100644
--- a/source/blender/blenlib/intern/math_bits_inline.c
+++ b/source/blender/blenlib/intern/math_bits_inline.c
@@ -28,7 +28,7 @@
 
 #include "BLI_math_bits.h"
 
-MINLINE int bitscan_forward_i(int a)
+MINLINE unsigned int bitscan_forward_uint(unsigned int a)
 {
   BLI_assert(a != 0);
 #ifdef _MSC_VER
@@ -36,28 +36,28 @@ MINLINE int bitscan_forward_i(int a)
   _BitScanForward(&ctz, a);
   return ctz;
 #else
-  return __builtin_ctz((unsigned int)a);
+  return (unsigned int)__builtin_ctz(a);
 #endif
 }
 
-MINLINE unsigned int bitscan_forward_uint(unsigned int a)
+MINLINE int bitscan_forward_i(int a)
 {
-  return (unsigned int)bitscan_forward_i((int)a);
+  return (int)bitscan_forward_uint((unsigned int)a);
 }
 
-MINLINE int bitscan_forward_clear_i(int *a)
+MINLINE unsigned int bitscan_forward_clear_uint(unsigned int *a)
 {
-  int i = bitscan_forward_i(*a);
+  unsigned int i = bitscan_forward_uint(*a);
   *a &= (*a) - 1;
   return i;
 }
 
-MINLINE unsigned int bitscan_forward_clear_uint(unsigned int *a)
+MINLINE int bitscan_forward_clear_i(int *a)
 {
-  return (unsigned int)bitscan_forward_clear_i((int *)a);
+  return (int)bitscan_forward_clear_uint((unsigned int *)a);
 }
 
-MINLINE int bitscan_reverse_i(int a)
+MINLINE unsigned int bitscan_reverse_uint(unsigned int a)
 {
   BLI_assert(a != 0);
 #ifdef _MSC_VER
@@ -65,26 +65,26 @@ MINLINE int bitscan_reverse_i(int a)
   _BitScanReverse(&clz, a);
   return clz;
 #else
-  return __builtin_clz((unsigned int)a);
+  return (unsigned int)__builtin_clz(a);
 #endif
 }
 
-MINLINE unsigned int bitscan_reverse_uint(unsigned int a)
+MINLINE int bitscan_reverse_i(int a)
 {
-  return (unsigned int)bitscan_reverse_i((int)a);
+  return (int)bitscan_reverse_uint((unsigned int)a);
 }
 
-MINLINE int bitscan_reverse_clear_i(int *a)
+MINLINE unsigned int bitscan_reverse_clear_uint(unsigned int *a)
 {
-  int i = bitscan_reverse_i(*a);
+  unsigned int i = bitscan_reverse_uint(*a);
   /* TODO(sergey): This could probably be optimized. */
-  *a &= ~(1 << (sizeof(int) * 8 - i - 1));
+  *a &= ~(1 << (sizeof(unsigned int) * 8 - i - 1));
   return i;
 }
 
-MINLINE unsigned int bitscan_reverse_clear_uint(unsigned int *a)
+MINLINE int bitscan_reverse_clear_i(int *a)
 {
-  return (unsigned int)bitscan_reverse_clear_i((int *)a);
+  return (int)bitscan_reverse_clear_uint((unsigned int *)a);
 }
 
 MINLINE unsigned int highest_order_bit_uint(unsigned int n)



More information about the Bf-blender-cvs mailing list