summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2020-03-30 10:52:48 +0200
committerDaniel Stenberg <daniel@haxx.se>2020-03-30 16:05:05 +0200
commit529add48bc2a8e66bdbc1926e7708535dd5317a2 (patch)
tree61bf7942cf7ea303d7267fe78c9904cf71e6fdb7
parent6d65a1917b5adc3f32a352b06775a6b0be57a582 (diff)
downloadcurl-529add48bc2a8e66bdbc1926e7708535dd5317a2.tar.gz
checksrc: warn on obvious conditional blocks on the same line as if()
Closes #5164
-rwxr-xr-xlib/checksrc.pl26
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) {