PCQRSCANER/venv/Lib/site-packages/imapclient/imaplib_ssl_fix.py
2019-12-22 21:51:47 +01:00

55 lines
1.5 KiB
Python

# Copyright (c) 2014, Menno Smits
# Released subject to the New BSD License
# Please see http://en.wikipedia.org/wiki/BSD_licenses
"""
Work-around for Python Issue 5943 (http://bugs.python.org/issue5949).
This will patch imaplib's IMAP4_SSL.readline method with the fixed
verion in Python versions that are known to have the problem.
The problem definitely exists in Python 2.5 and 2.6 up until but not
including 2.6.5. It was also fixed in Python 2.7 alpha 2 so no attempt
is made to patch 2.7 versions.
Please let me know if there's more Python versions that should be
patched.
Efforts are made to only perform the patch once.
"""
from __future__ import unicode_literals
import sys
import imaplib
def _is_affected_version(sys_version):
sys_version = sys_version[:3]
if sys_version < (2, 5, 0):
# Not sure whether these old versions are affected so being
# conservative and not patching.
return False
elif sys_version < (2, 6, 5):
return True
return False
def _fixed_readline(self):
"""Read line from remote."""
line = []
while True:
char = self.sslobj.read(1)
line.append(char)
if char in ("\n", ""):
return ''.join(line)
_fixed_readline.patched = True # Marker to indicate patched version
ssl_class = imaplib.IMAP4_SSL
def apply_patch():
if _is_affected_version(sys.version_info) and not hasattr(ssl_class.readline, 'patched'):
ssl_class.readline = _fixed_readline