Skip to content

Commit 47cb7f7

Browse files
committed
Add unit test to check invalid ANSI sequences
1 parent 87e7b4e commit 47cb7f7

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

colorama/ansitowin32.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -223,16 +223,17 @@ def extract_params(self, command, paramstring):
223223
def call_win32(self, command, params):
224224
if command == 'm':
225225
# Ansi sequences started by specific param may need to be ignored, see #217
226-
skip = False
226+
skip, skip_count = False, None
227227
for param in params:
228228
if skip:
229-
if skip is not True:
230-
skip -= 1
229+
if skip_count is not None:
230+
skip_count -= 1
231231
continue
232232
if param in (2, 5):
233-
skip = 1 if param == 5 else 3
233+
skip_count = 1 if param == 5 else 3
234234
continue
235235
skip = False
236+
skip_count = False
236237
if param in self.win32_calls:
237238
func_args = self.win32_calls[param]
238239
func = func_args[0]

colorama/tests/ansitowin32_test.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,22 @@ def testCallWin32UsesLookup(self):
203203
[a[0][0] for a in listener.call_args_list],
204204
[33, 11, 22] )
205205

206+
def testInvalidSequencesAreSkipped(self):
207+
sequences = [
208+
(38, 5, 46),
209+
(38, 2, 120, 33, 255),
210+
(48, 5, 31),
211+
(48, 2, 166, 226, 46),
212+
(38, 48, 5, 46),
213+
]
214+
for sequence in sequences:
215+
with self.subTest(sequence):
216+
listener = Mock()
217+
stream = AnsiToWin32(listener)
218+
stream.win32_calls = {i: (lambda *_, i=i,**__: listener(i),) for i in [2, 5, 33, 46, 166, 226, 46]}
219+
stream.call_win32('m', sequence)
220+
self.assertFalse(listener.call_args_list)
221+
206222

207223
if __name__ == '__main__':
208224
main()

0 commit comments

Comments
 (0)