[Python-checkins] cpython: Issue #14693: Under non-Windows platforms, hashlib's fallback modules are

antoine.pitrou python-checkins at python.org
Wed May 16 16:44:14 CEST 2012


http://hg.python.org/cpython/rev/0a1d7be10946
changeset:   76999:0a1d7be10946
user:        Antoine Pitrou <solipsis at pitrou.net>
date:        Wed May 16 16:41:26 2012 +0200
summary:
  Issue #14693: Under non-Windows platforms, hashlib's fallback modules are always compiled, even if OpenSSL is present at build time.

files:
  Lib/test/test_hashlib.py |   4 +++-
  Misc/NEWS                |   3 +++
  setup.py                 |  25 +++++++++++--------------
  3 files changed, 17 insertions(+), 15 deletions(-)


diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py
--- a/Lib/test/test_hashlib.py
+++ b/Lib/test/test_hashlib.py
@@ -9,6 +9,7 @@
 import array
 import hashlib
 import itertools
+import os
 import sys
 try:
     import threading
@@ -37,7 +38,8 @@
                              'sha224', 'SHA224', 'sha256', 'SHA256',
                              'sha384', 'SHA384', 'sha512', 'SHA512' )
 
-    _warn_on_extension_import = COMPILED_WITH_PYDEBUG
+    # Issue #14693: fallback modules are always compiled under POSIX
+    _warn_on_extension_import = os.name == 'posix' or COMPILED_WITH_PYDEBUG
 
     def _conditional_import_module(self, module_name):
         """Import a module and return a reference to it or None on failure."""
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -125,6 +125,9 @@
 Build
 -----
 
+- Issue #14693: Under non-Windows platforms, hashlib's fallback modules are
+  always compiled, even if OpenSSL is present at build time.
+
 - Issue #13210: Windows build now uses VS2010, ported from VS2008.
 
 
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -749,20 +749,17 @@
                       openssl_ver)
                 missing.append('_hashlib')
 
-        min_sha2_openssl_ver = 0x00908000
-        if COMPILED_WITH_PYDEBUG or openssl_ver < min_sha2_openssl_ver:
-            # OpenSSL doesn't do these until 0.9.8 so we'll bring our own hash
-            exts.append( Extension('_sha256', ['sha256module.c'],
-                                   depends=['hashlib.h']) )
-            exts.append( Extension('_sha512', ['sha512module.c'],
-                                   depends=['hashlib.h']) )
-
-        if COMPILED_WITH_PYDEBUG or not have_usable_openssl:
-            # no openssl at all, use our own md5 and sha1
-            exts.append( Extension('_md5', ['md5module.c'],
-                                   depends=['hashlib.h']) )
-            exts.append( Extension('_sha1', ['sha1module.c'],
-                                   depends=['hashlib.h']) )
+        # We always compile these even when OpenSSL is available (issue #14693).
+        # It's harmless and the object code is tiny (40-50 KB per module,
+        # only loaded when actually used).
+        exts.append( Extension('_sha256', ['sha256module.c'],
+                               depends=['hashlib.h']) )
+        exts.append( Extension('_sha512', ['sha512module.c'],
+                               depends=['hashlib.h']) )
+        exts.append( Extension('_md5', ['md5module.c'],
+                               depends=['hashlib.h']) )
+        exts.append( Extension('_sha1', ['sha1module.c'],
+                               depends=['hashlib.h']) )
 
         # Modules that provide persistent dictionary-like semantics.  You will
         # probably want to arrange for at least one of them to be available on

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list