The checkpatch script will hang forever on line 282 of a otherwise
valid patch [0].  While the root of the issue is probably
somewhere between the regex itself and the Python re
implementation, this patch provides an early return to avoid this
specific issue.

Also fix the docstring for the if_and_for_end_with_bracket_check
function.

0: 
https://patchwork.ozlabs.org/project/ovn/patch/[email protected]/
Signed-off-by: Frode Nordahl <[email protected]>
---
 utilities/checkpatch.py | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/utilities/checkpatch.py b/utilities/checkpatch.py
index 9e8d17653..7c316267f 100755
--- a/utilities/checkpatch.py
+++ b/utilities/checkpatch.py
@@ -34,6 +34,7 @@ colors = False
 spellcheck_comments = False
 quiet = False
 spell_check_dict = None
+MAX_LINE_LEN = 79
 
 
 def open_spell_check_dict():
@@ -247,7 +248,7 @@ def if_and_for_whitespace_checks(line):
 
 
 def if_and_for_end_with_bracket_check(line):
-    """Return TRUE if there is not a bracket at the end of an if, for, while
+    """Return FALSE if there is not a bracket at the end of an if, for, while
        block which fits on a single line ie: 'if (foo)'"""
 
     def balanced_parens(line):
@@ -264,6 +265,11 @@ def if_and_for_end_with_bracket_check(line):
         if not balanced_parens(line):
             return True
 
+        # Early return to avoid potential catastrophic backtracking in the
+        # __regex_if_macros regex
+        if len(line) == MAX_LINE_LEN - 1 and line[-1] == ')':
+            return True
+
         if __regex_ends_with_bracket.search(line) is None and \
            __regex_if_macros.match(line) is None:
             return False
@@ -282,7 +288,7 @@ def pointer_whitespace_check(line):
 
 def line_length_check(line):
     """Return TRUE if the line length is too long"""
-    if len(line) > 79:
+    if len(line) > MAX_LINE_LEN:
         print_warning("Line is %d characters long (recommended limit is 79)"
                       % len(line))
         return True
-- 
2.32.0

_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to