diff options
author | Daniel Stenberg <daniel@haxx.se> | 2020-03-30 10:52:48 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2020-03-30 16:05:05 +0200 |
commit | 529add48bc2a8e66bdbc1926e7708535dd5317a2 (patch) | |
tree | 61bf7942cf7ea303d7267fe78c9904cf71e6fdb7 | |
parent | 6d65a1917b5adc3f32a352b06775a6b0be57a582 (diff) |
checksrc: warn on obvious conditional blocks on the same line as if()
Closes #5164
-rwxr-xr-x | lib/checksrc.pl | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/lib/checksrc.pl b/lib/checksrc.pl index f7263c547..b074f2744 100755 --- a/lib/checksrc.pl +++ b/lib/checksrc.pl @@ -80,6 +80,7 @@ my %warnings = ( 'MULTISPACE' => 'multiple spaces used when not suitable', 'SIZEOFNOPAREN' => 'use of sizeof without parentheses', 'SNPRINTF' => 'use of snprintf', + 'ONELINECONDITION' => 'conditional block on the same line as the if()', ); sub readwhitelist { @@ -457,13 +458,34 @@ sub scanfile { } } - if($nostr =~ /^((.*)(if) *\()(.*)\)/) { + if($nostr =~ /^((.*\s)(if) *\()(.*)\)(.*)/) { my $pos = length($1); - if($4 =~ / = /) { + my $postparen = $5; + my $cond = $4; + if($cond =~ / = /) { checkwarn("ASSIGNWITHINCONDITION", $line, $pos+1, $file, $l, "assignment within conditional expression"); } + my $temp = $cond; + $temp =~ s/\(//g; # remove open parens + my $openc = length($cond) - length($temp); + + $temp = $cond; + $temp =~ s/\)//g; # remove close parens + my $closec = length($cond) - length($temp); + my $even = $openc == $closec; + + if($l =~ / *\#/) { + # this is a #if, treat it differently + } + elsif($even && $postparen && + ($postparen !~ /^ *$/) && ($postparen !~ /^ *[,{&|\\]+/)) { + print STDERR "5: '$postparen'\n"; + checkwarn("ONELINECONDITION", + $line, length($l)-length($postparen), $file, $l, + "conditional block on the same line"); + } } # check spaces after open parentheses if($l =~ /^(.*[a-z])\( /i) { |