Skip to content

Commit 7796819

Browse files
committed
Add unit test to check invalid ANSI sequences
1 parent db6ca15 commit 7796819

File tree

2 files changed

+30
-4
lines changed

2 files changed

+30
-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: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,31 @@ def test_osc_codes(self):
227227
for code in data:
228228
stream.write(code)
229229
self.assertEqual(winterm.set_title.call_count, 2)
230+
231+
def testInvalidSequencesAreSkipped(self):
232+
sequences = [
233+
(38, 5, 46),
234+
(38, 2, 120, 33, 255),
235+
(48, 5, 31),
236+
(48, 2, 166, 226, 46),
237+
(38, 48, 5, 46),
238+
]
239+
for sequence in sequences:
240+
with self.subTest(sequence):
241+
listener = Mock()
242+
stream = AnsiToWin32(listener)
243+
stream.win32_calls = {
244+
2: (lambda *_, **__: listener(2),),
245+
5: (lambda *_, **__: listener(5),),
246+
33: (lambda *_, **__: listener(33),),
247+
46: (lambda *_, **__: listener(46),),
248+
166: (lambda *_, **__: listener(166),),
249+
226: (lambda *_, **__: listener(226),),
250+
255: (lambda *_, **__: listener(255),),
251+
}
252+
stream.call_win32('m', sequence)
253+
self.assertFalse(listener.called)
254+
230255

231256
if __name__ == '__main__':
232257
main()

0 commit comments

Comments
 (0)