summaryrefslogtreecommitdiff
path: root/Objects/unicodeobject.c
diff options
context:
space:
mode:
authorGregory P. Smith <greg@krypto.org>2012-12-10 19:51:29 -0800
committerGregory P. Smith <greg@krypto.org>2012-12-10 19:51:29 -0800
commit27dc02e8c5b8e0d8355b6a12d3121891604f2e7d (patch)
tree38fc0332b6dbbebbc5acc19eb476e5995b5d2406 /Objects/unicodeobject.c
parente348c8d154cf6342c79d627ebfe89dfe9de23817 (diff)
parenta82fe52acc120e56e4649249bbe3adb2e60baba6 (diff)
downloadcpython-git-27dc02e8c5b8e0d8355b6a12d3121891604f2e7d.tar.gz
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.
Diffstat (limited to 'Objects/unicodeobject.c')
-rw-r--r--Objects/unicodeobject.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 0451f0d789..4efc93df06 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -10885,7 +10885,7 @@ static Py_hash_t
unicode_hash(PyObject *self)
{
Py_ssize_t len;
- Py_uhash_t x;
+ Py_uhash_t x; /* Unsigned for defined overflow behavior. */
#ifdef Py_DEBUG
assert(_Py_HashSecret_Initialized);