]> granicus.if.org Git - python/commit
Fix the internals of our hash functions to used unsigned values during hash
authorGregory P. Smith <greg@krypto.org>
Tue, 11 Dec 2012 03:51:29 +0000 (19:51 -0800)
committerGregory P. Smith <greg@krypto.org>
Tue, 11 Dec 2012 03:51:29 +0000 (19:51 -0800)
commit27dc02e8c5b8e0d8355b6a12d3121891604f2e7d
tree38fc0332b6dbbebbc5acc19eb476e5995b5d2406
parente348c8d154cf6342c79d627ebfe89dfe9de23817
parenta82fe52acc120e56e4649249bbe3adb2e60baba6
Fix the internals of our hash functions to used unsigned values during hash
computation as the overflow behavior of signed integers is undefined.

NOTE: This change is smaller compared to 3.2 as much of this cleanup had
already been done.  I added the comment that my change in 3.2 added so that the
code would match up.  Otherwise this just adds or synchronizes appropriate UL
designations on some constants to be pedantic.

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.  We could work to get rid of the -fwrapv requirement
in 3.4 but that requires more planning.

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

Cleanup only - no functionality or hash values change.
Include/pyport.h
Objects/unicodeobject.c