From: Mark Dickinson Date: Sun, 8 Feb 2009 15:11:29 +0000 (+0000) Subject: Merged revisions 69440 via svnmerge from X-Git-Tag: v3.0.1~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f593d9cc828a148b094230a641900d6a844500ac;p=thirdparty%2FPython%2Fcpython.git Merged revisions 69440 via svnmerge from svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r69440 | mark.dickinson | 2009-02-08 15:09:21 +0000 (Sun, 08 Feb 2009) | 17 lines Merged revisions 69436 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r69436 | mark.dickinson | 2009-02-08 14:42:28 +0000 (Sun, 08 Feb 2009) | 10 lines Issue #789290: make sure that hash(2**63) == hash(2.**63) on 64-bit platforms. The previous code was fragile, depending on the twin accidents that: (1) in C, casting the double value 2.**63 to long returns the integer value -2**63, and (2) in Python, hash(-2**63) == hash(2**63). There's already a test for this in test_hash. ........ ................ --- diff --git a/Objects/object.c b/Objects/object.c index 9bc3c5788f04..298cacc1d758 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -650,7 +650,7 @@ _Py_HashDouble(double v) fractpart = modf(v, &intpart); if (fractpart == 0.0) { /* This must return the same hash as an equal int or long. */ - if (intpart > LONG_MAX || -intpart > LONG_MAX) { + if (intpart > LONG_MAX/2 || -intpart > LONG_MAX/2) { /* Convert to long and use its hash. */ PyObject *plong; /* converted to Python long */ if (Py_IS_INFINITY(intpart))