diff --git a/parso/python/diff.py b/parso/python/diff.py index 25687fd..41f1794 100644 --- a/parso/python/diff.py +++ b/parso/python/diff.py @@ -388,7 +388,7 @@ class DiffParser(object): # endmarker or another dedented code block. typ, string, start_pos, prefix = next(tokens) if '\n' in prefix or '\r' in prefix: - prefix = re.sub(r'(<=\n|\r)[^\n\r]+$', '', prefix) + prefix = re.sub(r'(?<=\n|\r)[^\n\r]+$', '', prefix) else: prefix = '' yield PythonToken( diff --git a/test/test_diff_parser.py b/test/test_diff_parser.py index 4e80bd2..5946f8d 100644 --- a/test/test_diff_parser.py +++ b/test/test_diff_parser.py @@ -956,6 +956,9 @@ def test_wrong_backslash(differ): def test_random_unicode_characters(differ): + """ + Those issues were all found with the fuzzer. + """ differ.initialize('') differ.parse('\x1dĔBϞɛˁşʑ˳˻ȣſéÎ\x90̕ȟòwʘ\x1dĔBϞɛˁşʑ˳˻ȣſéÎ', parsers=1, expect_error_leaves=True) differ.parse('\r\r', parsers=1) @@ -965,4 +968,5 @@ def test_random_unicode_characters(differ): differ.parse(s, parsers=1, expect_error_leaves=True) differ.parse('') differ.parse(s + '\n', parsers=1, expect_error_leaves=True) + differ.parse(' result = (\r\f\x17\t\x11res)', parsers=2, expect_error_leaves=True) differ.parse('')