Fix the internals of our hash functions to used unsigned values during hash

computation as the overflow behavior of signed integers is undefined.

In practice we require compiling everything with -fwrapv which forces overflow
to be defined as twos compliment but this keeps the code cleaner for checkers
or in the case where someone has compiled it without -fwrapv or their
compiler's equivalent.

Found by Clang trunk's Undefined Behavior Sanitizer (UBSan).

Cleanup only - no functionality or hash values change.
This commit is contained in:
Gregory P. Smith 2012-12-10 18:15:46 -08:00
parent 90555d0f0d
commit 27cbcd6241
5 changed files with 14 additions and 14 deletions

View file

@ -145,7 +145,7 @@ Used in: PY_LONG_LONG
#endif
/* Prime multiplier used in string and various other hashes. */
#define _PyHASH_MULTIPLIER 1000003 /* 0xf4243 */
#define _PyHASH_MULTIPLIER 1000003UL /* 0xf4243 */
/* Parameters used for the numeric hash implementation. See notes for
_PyHash_Double in Objects/object.c. Numeric hashes are based on