mirror of
https://github.com/python/cpython.git
synced 2025-08-29 13:15:11 +00:00
closes bpo-38402: Check error of primitive crypt/crypt_r. (GH-16599)
Checks also for encryption algorithms methods not supported in different OSs. Signed-off-by: Antonio Gutierrez <chibby0ne@gmail.com>
This commit is contained in:
parent
4d5f94b8cd
commit
0d3fe8ae49
3 changed files with 13 additions and 1 deletions
10
Lib/crypt.py
10
Lib/crypt.py
|
@ -10,6 +10,7 @@ except ModuleNotFoundError:
|
|||
else:
|
||||
raise ImportError("The required _crypt module was not built as part of CPython")
|
||||
|
||||
import errno
|
||||
import string as _string
|
||||
from random import SystemRandom as _SystemRandom
|
||||
from collections import namedtuple as _namedtuple
|
||||
|
@ -88,7 +89,14 @@ def _add_method(name, *args, rounds=None):
|
|||
method = _Method(name, *args)
|
||||
globals()['METHOD_' + name] = method
|
||||
salt = mksalt(method, rounds=rounds)
|
||||
result = crypt('', salt)
|
||||
result = None
|
||||
try:
|
||||
result = crypt('', salt)
|
||||
except OSError as e:
|
||||
# Not all libc libraries support all encryption methods.
|
||||
if e.errno == errno.EINVAL:
|
||||
return False
|
||||
raise
|
||||
if result and len(result) == method.total_size:
|
||||
methods.append(method)
|
||||
return True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue