From 2e802e8af72f7511b54b98436419471f4749d77e Mon Sep 17 00:00:00 2001 From: carl Date: Thu, 21 Aug 2014 16:02:41 +0200 Subject: [PATCH] Notes (TODO, XXX etc) are now searched for using a simple `in` before resorting to the regular expression, in order to avoid using the regexp on every line and to prevent a pathological problem for extremely long lines (50k+ characters) --- checkers/misc.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/checkers/misc.py b/checkers/misc.py index b53f88219..b27b86ae6 100644 --- a/checkers/misc.py +++ b/checkers/misc.py @@ -54,6 +54,17 @@ class EncodingChecker(BaseChecker): 'separated by a comma.')}),) def _check_note(self, notes, lineno, line): + # First, simply check if the notes are in the line at all. This is an + # optimisation to prevent using the regular expression on every line, + # but rather only on lines which may actually contain one of the notes. + # This prevents a pathological problem with lines that are hundreds + # of thousands of characters long. + for note in self.config.notes: + if note in line: + break + else: + return + match = notes.search(line) if not match: return