diff --git a/passlib/utils/__init__.py b/passlib/utils/__init__.py index 69b55e5..d18ec50 100644 --- a/passlib/utils/__init__.py +++ b/passlib/utils/__init__.py @@ -807,7 +807,13 @@ else: if isinstance(hash, bytes): hash = hash.decode("ascii") - result = _crypt(secret, hash) + try: + result = _crypt(secret, hash) + except OSError: + # new in py39 -- per https://bugs.python.org/issue39289, + # crypt() now throws OSError for various things, mainly unknown hash formats + # translating that to None for now (may revise safe_crypt behavior in future) + return None if PYPY and isinstance(result, bytes): result = result.decode("utf-8") if not result or result[0:1] in _invalid_prefixes: