- fix issue #6106, Telnet.process_rawq default handling of WILL/WONT/DO/DONT
This commit is contained in:
parent
f346ac08e6
commit
36596a3c23
|
@ -459,7 +459,7 @@ class Telnet:
|
||||||
# unless we did a WILL/DO before.
|
# unless we did a WILL/DO before.
|
||||||
self.msg('IAC %d not recognized' % ord(c))
|
self.msg('IAC %d not recognized' % ord(c))
|
||||||
elif len(self.iacseq) == 2:
|
elif len(self.iacseq) == 2:
|
||||||
cmd = self.iacseq[1]
|
cmd = self.iacseq[1:2]
|
||||||
self.iacseq = b''
|
self.iacseq = b''
|
||||||
opt = c
|
opt = c
|
||||||
if cmd in (DO, DONT):
|
if cmd in (DO, DONT):
|
||||||
|
|
|
@ -3,6 +3,8 @@ import threading
|
||||||
import telnetlib
|
import telnetlib
|
||||||
import time
|
import time
|
||||||
import queue
|
import queue
|
||||||
|
import sys
|
||||||
|
import io
|
||||||
|
|
||||||
from unittest import TestCase
|
from unittest import TestCase
|
||||||
from test import support
|
from test import support
|
||||||
|
@ -304,6 +306,20 @@ class nego_collector(object):
|
||||||
self.sb_seen += sb_data
|
self.sb_seen += sb_data
|
||||||
|
|
||||||
tl = telnetlib
|
tl = telnetlib
|
||||||
|
|
||||||
|
class TelnetDebuglevel(tl.Telnet):
|
||||||
|
''' Telnet-alike that captures messages written to stdout when
|
||||||
|
debuglevel > 0
|
||||||
|
'''
|
||||||
|
_messages = ''
|
||||||
|
def msg(self, msg, *args):
|
||||||
|
orig_stdout = sys.stdout
|
||||||
|
sys.stdout = fake_stdout = io.StringIO()
|
||||||
|
tl.Telnet.msg(self, msg, *args)
|
||||||
|
self._messages += fake_stdout.getvalue()
|
||||||
|
sys.stdout = orig_stdout
|
||||||
|
return
|
||||||
|
|
||||||
class OptionTests(TestCase):
|
class OptionTests(TestCase):
|
||||||
setUp = _read_setUp
|
setUp = _read_setUp
|
||||||
tearDown = _read_tearDown
|
tearDown = _read_tearDown
|
||||||
|
@ -363,6 +379,36 @@ class OptionTests(TestCase):
|
||||||
self.assertEqual(b'', telnet.read_sb_data())
|
self.assertEqual(b'', telnet.read_sb_data())
|
||||||
nego.sb_getter = None # break the nego => telnet cycle
|
nego.sb_getter = None # break the nego => telnet cycle
|
||||||
|
|
||||||
|
def _test_debuglevel(self, data, expected_msg):
|
||||||
|
""" helper for testing debuglevel messages """
|
||||||
|
self.setUp()
|
||||||
|
self.dataq.put(data)
|
||||||
|
telnet = TelnetDebuglevel(HOST, self.port)
|
||||||
|
telnet.set_debuglevel(1)
|
||||||
|
self.dataq.join()
|
||||||
|
txt = telnet.read_all()
|
||||||
|
self.assertTrue(expected_msg in telnet._messages,
|
||||||
|
msg=(telnet._messages, expected_msg))
|
||||||
|
self.tearDown()
|
||||||
|
|
||||||
|
def test_debuglevel(self):
|
||||||
|
# test all the various places that self.msg(...) is called
|
||||||
|
given_a_expect_b = [
|
||||||
|
# Telnet.fill_rawq
|
||||||
|
(b'a', ": recv b''\n"),
|
||||||
|
# Telnet.process_rawq
|
||||||
|
(tl.IAC + bytes([88]), ": IAC 88 not recognized\n"),
|
||||||
|
(tl.IAC + tl.DO + bytes([1]), ": IAC DO 1\n"),
|
||||||
|
(tl.IAC + tl.DONT + bytes([1]), ": IAC DONT 1\n"),
|
||||||
|
(tl.IAC + tl.WILL + bytes([1]), ": IAC WILL 1\n"),
|
||||||
|
(tl.IAC + tl.WONT + bytes([1]), ": IAC WONT 1\n"),
|
||||||
|
# Telnet.write
|
||||||
|
# XXX, untested
|
||||||
|
]
|
||||||
|
for a, b in given_a_expect_b:
|
||||||
|
self._test_debuglevel([a, EOF_sigil], b)
|
||||||
|
return
|
||||||
|
|
||||||
def test_main(verbose=None):
|
def test_main(verbose=None):
|
||||||
support.run_unittest(GeneralTests, ReadTests, OptionTests)
|
support.run_unittest(GeneralTests, ReadTests, OptionTests)
|
||||||
|
|
||||||
|
|
|
@ -709,6 +709,7 @@ Michael Stone
|
||||||
Ken Stox
|
Ken Stox
|
||||||
Dan Stromberg
|
Dan Stromberg
|
||||||
Daniel Stutzbach
|
Daniel Stutzbach
|
||||||
|
Pal Subbiah
|
||||||
Nathan Sullivan
|
Nathan Sullivan
|
||||||
Mark Summerfield
|
Mark Summerfield
|
||||||
Hisao Suzuki
|
Hisao Suzuki
|
||||||
|
|
|
@ -60,6 +60,9 @@ C-API
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #6106: telnetlib.Telnet.process_rawq doesn't handle default WILL/WONT
|
||||||
|
DO/DONT correctly.
|
||||||
|
|
||||||
- Issue #1424152: Fix for http.client, urllib.request to support SSL while
|
- Issue #1424152: Fix for http.client, urllib.request to support SSL while
|
||||||
working through proxy. Original patch by Christopher Li, changes made by
|
working through proxy. Original patch by Christopher Li, changes made by
|
||||||
Senthil Kumaran
|
Senthil Kumaran
|
||||||
|
|
Loading…
Reference in New Issue