Skip to content

Commit

Permalink
Don't crash in lexer on closing delimiter if it was never opened.
Browse files Browse the repository at this point in the history
whitequark committed May 8, 2015
1 parent 9178a50 commit a470d6b
Showing 2 changed files with 18 additions and 7 deletions.
21 changes: 14 additions & 7 deletions pyparser/lexer.py
Original file line number Diff line number Diff line change
@@ -522,16 +522,23 @@ def _check_innermost_pair_delim(self, range, expected):
ranges.append(("{", self.curly_braces[-1]))

ranges.sort(key=lambda k: k[1].begin_pos)
compl_kind, compl_range = ranges[-1]
if compl_kind != expected:
note = diagnostic.Diagnostic(
"note", "'{delimiter}' opened here",
{"delimiter": compl_kind},
compl_range)
if any(ranges):
compl_kind, compl_range = ranges[-1]
if compl_kind != expected:
note = diagnostic.Diagnostic(
"note", "'{delimiter}' opened here",
{"delimiter": compl_kind},
compl_range)
error = diagnostic.Diagnostic(
"fatal", "mismatched '{delimiter}'",
{"delimiter": range.source()},
range, notes=[note])
raise diagnostic.DiagnosticException(error)
else:
error = diagnostic.Diagnostic(
"fatal", "mismatched '{delimiter}'",
{"delimiter": range.source()},
range, notes=[note])
range)
raise diagnostic.DiagnosticException(error)

def __iter__(self):
4 changes: 4 additions & 0 deletions pyparser/test/test_lexer.py
Original file line number Diff line number Diff line change
@@ -314,6 +314,10 @@ def test_diag_delim_mismatch(self):
[("fatal", "mismatched ')'", (1, 2))],
"[", None)

self.assertDiagnoses(
")",
[("fatal", "mismatched ')'", (0, 1))])

"""
def test_(self):
self.assertLexes("",

0 comments on commit a470d6b

Please sign in to comment.