diff options
author | Gregory P. Smith <greg@krypto.org> | 2011-05-14 22:15:49 (GMT) |
---|---|---|
committer | Gregory P. Smith <greg@krypto.org> | 2011-05-14 22:15:49 (GMT) |
commit | 12c9d028ed0a1803019f3796014e75c74d9de2f6 (patch) | |
tree | af6ae4f6fe85005be8c7ad2e916a9f11528cdded /Lib/hashlib.py | |
parent | e670c889ccf5ce7b27dedbc7d6d24e0679ca93bb (diff) | |
download | cpython-12c9d028ed0a1803019f3796014e75c74d9de2f6.zip cpython-12c9d028ed0a1803019f3796014e75c74d9de2f6.tar.gz cpython-12c9d028ed0a1803019f3796014e75c74d9de2f6.tar.bz2 |
Fixes Issue #12059: Properly handle missing hash functions even when
the expected builtin modules are not present.
This includes a unittest for __get_builtin_constructor() in the face
of such an error.
Diffstat (limited to 'Lib/hashlib.py')
-rw-r--r-- | Lib/hashlib.py | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/Lib/hashlib.py b/Lib/hashlib.py index 0d7e325..0ebeed5 100644 --- a/Lib/hashlib.py +++ b/Lib/hashlib.py @@ -64,26 +64,29 @@ __all__ = __always_supported + ('new', 'algorithms_guaranteed', def __get_builtin_constructor(name): - if name in ('SHA1', 'sha1'): - import _sha1 - return _sha1.sha1 - elif name in ('MD5', 'md5'): - import _md5 - return _md5.md5 - elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'): - import _sha256 - bs = name[3:] - if bs == '256': - return _sha256.sha256 - elif bs == '224': - return _sha256.sha224 - elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'): - import _sha512 - bs = name[3:] - if bs == '512': - return _sha512.sha512 - elif bs == '384': - return _sha512.sha384 + try: + if name in ('SHA1', 'sha1'): + import _sha1 + return _sha1.sha1 + elif name in ('MD5', 'md5'): + import _md5 + return _md5.md5 + elif name in ('SHA256', 'sha256', 'SHA224', 'sha224'): + import _sha256 + bs = name[3:] + if bs == '256': + return _sha256.sha256 + elif bs == '224': + return _sha256.sha224 + elif name in ('SHA512', 'sha512', 'SHA384', 'sha384'): + import _sha512 + bs = name[3:] + if bs == '512': + return _sha512.sha512 + elif bs == '384': + return _sha512.sha384 + except ImportError: + pass # no extension module, this hash is unsupported. raise ValueError('unsupported hash type %s' % name) |