Skip to content

Commit

Permalink
Rolled back Windows multithreading crash fix, as upgrading from Pytho…
Browse files Browse the repository at this point in the history
…n v3.9 to v3.11 may have fixed the root cause. (#152)
  • Loading branch information
jtesta committed Apr 27, 2023
1 parent 1eab4ab commit 0074fcc
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 15 deletions.
1 change: 0 additions & 1 deletion README.md
Expand Up @@ -189,7 +189,6 @@ For convenience, a web front-end on top of the command-line tool is available at
- JSON output now includes recommendations and CVE data.
- Mixed host key/CA key types (i.e.: RSA host keys signed with ED25519 CAs, etc.) are now properly handled.
- Warnings are now printed for 2048-bit moduli.
- Fixed Windows-specific crash when multiple threads were used.
- SHA-1 algorithms now cause failures.
- CBC mode ciphers are now warnings instead of failures.
- Generic failure/warning messages replaced with more specific reasons (i.e.: 'using weak cipher' => 'using broken RC4 cipher').
Expand Down
4 changes: 2 additions & 2 deletions build_windows_executable.sh
Expand Up @@ -49,8 +49,8 @@ if [[ "$(python -V)" != "Python 3."* ]]; then
fi

# Install/update package dependencies.
echo "Installing/updating pyinstaller, colorama, and idna packages..."
pip install -U pyinstaller colorama idna
echo "Installing/updating pyinstaller and colorama packages..."
pip install -U pyinstaller colorama
echo

# Prompt for the version to release.
Expand Down
24 changes: 12 additions & 12 deletions src/ssh_audit/ssh_audit.py
Expand Up @@ -62,7 +62,7 @@
from ssh_audit.versionvulnerabilitydb import VersionVulnerabilityDB


no_idna_workaround = False
# no_idna_workaround = False

# Only import colorama under Windows. Other OSes can natively handle terminal colors.
if sys.platform == 'win32':
Expand All @@ -73,12 +73,12 @@
pass

# This is a workaround for a Python bug that causes a crash on Windows when multiple threads are used (see https://github.com/python/cpython/issues/73474). Importing the idna module and using it in a no-op seems to fix the issue. Otherwise, if idna isn't available at run-time, force single threaded scans.
try:
import idna # noqa: F401

''.encode('idna')
except ImportError:
no_idna_workaround = True
# try:
# import idna # noqa: F401
#
# ''.encode('idna')
# except ImportError:
# no_idna_workaround = True


def usage(uout: OutputBuffer, err: Optional[str] = None) -> None:
Expand Down Expand Up @@ -766,13 +766,13 @@ def process_commandline(out: OutputBuffer, args: List[str], usage_cb: Callable[.
aconf.target_file = a

# If we're on Windows, and we can't use the idna workaround, force only one thread to be used (otherwise a crash would occur).
if no_idna_workaround:
print("\nWARNING: the idna module was not found on this system, thus only single-threaded scanning will be done (this is a workaround for this Windows-specific crash: https://github.com/python/cpython/issues/73474). Multi-threaded scanning can be enabled by installing the idna module (pip install idna).\n")
aconf.threads = 1
# if no_idna_workaround:
# print("\nWARNING: the idna module was not found on this system, thus only single-threaded scanning will be done (this is a workaround for this Windows-specific crash: https://github.com/python/cpython/issues/73474). Multi-threaded scanning can be enabled by installing the idna module (pip install idna).\n")
# aconf.threads = 1
elif o == '--threads':
aconf.threads = int(a)
if no_idna_workaround:
aconf.threads = 1
# if no_idna_workaround:
# aconf.threads = 1
elif o in ('-L', '--list-policies'):
aconf.list_policies = True
elif o == '--lookup':
Expand Down

0 comments on commit 0074fcc

Please sign in to comment.