Commit ab312372 authored by Antoine Pitrou's avatar Antoine Pitrou

Issue #14693: Under non-Windows platforms, hashlib's fallback modules are...

Issue #14693: Under non-Windows platforms, hashlib's fallback modules are always compiled, even if OpenSSL is present at build time.
parent a34ef4a1
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
import array import array
import hashlib import hashlib
import itertools import itertools
import os
import sys import sys
try: try:
import threading import threading
...@@ -37,7 +38,8 @@ class HashLibTestCase(unittest.TestCase): ...@@ -37,7 +38,8 @@ class HashLibTestCase(unittest.TestCase):
'sha224', 'SHA224', 'sha256', 'SHA256', 'sha224', 'SHA224', 'sha256', 'SHA256',
'sha384', 'SHA384', 'sha512', 'SHA512' ) '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): def _conditional_import_module(self, module_name):
"""Import a module and return a reference to it or None on failure.""" """Import a module and return a reference to it or None on failure."""
......
...@@ -125,6 +125,9 @@ Tools/Demos ...@@ -125,6 +125,9 @@ Tools/Demos
Build 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. - Issue #13210: Windows build now uses VS2010, ported from VS2008.
......
...@@ -749,20 +749,17 @@ class PyBuildExt(build_ext): ...@@ -749,20 +749,17 @@ class PyBuildExt(build_ext):
openssl_ver) openssl_ver)
missing.append('_hashlib') missing.append('_hashlib')
min_sha2_openssl_ver = 0x00908000 # We always compile these even when OpenSSL is available (issue #14693).
if COMPILED_WITH_PYDEBUG or openssl_ver < min_sha2_openssl_ver: # It's harmless and the object code is tiny (40-50 KB per module,
# OpenSSL doesn't do these until 0.9.8 so we'll bring our own hash # only loaded when actually used).
exts.append( Extension('_sha256', ['sha256module.c'], exts.append( Extension('_sha256', ['sha256module.c'],
depends=['hashlib.h']) ) depends=['hashlib.h']) )
exts.append( Extension('_sha512', ['sha512module.c'], exts.append( Extension('_sha512', ['sha512module.c'],
depends=['hashlib.h']) ) depends=['hashlib.h']) )
exts.append( Extension('_md5', ['md5module.c'],
if COMPILED_WITH_PYDEBUG or not have_usable_openssl: depends=['hashlib.h']) )
# no openssl at all, use our own md5 and sha1 exts.append( Extension('_sha1', ['sha1module.c'],
exts.append( Extension('_md5', ['md5module.c'], depends=['hashlib.h']) )
depends=['hashlib.h']) )
exts.append( Extension('_sha1', ['sha1module.c'],
depends=['hashlib.h']) )
# Modules that provide persistent dictionary-like semantics. You will # Modules that provide persistent dictionary-like semantics. You will
# probably want to arrange for at least one of them to be available on # probably want to arrange for at least one of them to be available on
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment