]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
checksrc: warn on obvious conditional blocks on the same line as if()
authorDaniel Stenberg <daniel@haxx.se>
Mon, 30 Mar 2020 08:52:48 +0000 (10:52 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Mon, 30 Mar 2020 14:05:05 +0000 (16:05 +0200)
Closes #5164

lib/checksrc.pl

index f7263c54757be2eb9879510bf05ab535ce64e865..b074f2744f44c5758f60ca6e104e78cd9d97e103 100755 (executable)
@@ -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) {