On Fri, Aug 20, 2021 at 1:09 AM Frode Nordahl
<[email protected]> wrote:
>
> 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.
Thank you for catching this. We hit a snag last week where our CI got
stuck on checkpatch.py for a couple of days without anyone noticing. I
didn't look into it but I hope this is the cause and this patch fixes
it.
>
> 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
Nit-picking: double negatives can be confusing
s/FALSE/TRUE/
s/not //
>         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
> +
Why not >= ?
>          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
>

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

Reply via email to