Checkpatch did not handle cases where the author From: header
was split into two lines. The author string went empty and
checkpatch generated a false NO_AUTHOR_SIGN_OFF warning.

Support split From: headers in AUTHOR_SIGN_OFF check by adding
an additional clause to resolve author identity in such cases.

Signed-off-by: Dwaipayan Ray <[email protected]>
---
 scripts/checkpatch.pl | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 504d2e431c60..86975baead22 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1210,6 +1210,16 @@ sub reformat_email {
        return format_email($email_name, $email_address);
 }
 
+sub format_author_email {
+       my ($email, $from) = @_;
+
+       $email = encode("utf8", $email) if ($from =~ /=\?utf-8\?/i);
+       $email =~ s/"//g;
+       $email = reformat_email($email);
+
+       return $email;
+}
+
 sub same_email_addresses {
        my ($email1, $email2) = @_;
 
@@ -2347,6 +2357,7 @@ sub process {
        my $signoff = 0;
        my $author = '';
        my $authorsignoff = 0;
+       my $prevheader = '';
        my $is_patch = 0;
        my $is_binding_patch = -1;
        my $in_header_lines = $file ? 0 : 1;
@@ -2658,12 +2669,21 @@ sub process {
                        }
                }
 
+# Check the patch for a split From:
+               if($prevheader ne '') {
+                       if ($author eq '' && decode("MIME-Header", $prevheader) 
=~ /^From:\s*(.*)/) {
+                               my $email = $1.$line;
+                               $author = format_author_email($email, 
$prevheader);
+                       }
+                       $prevheader = '';
+               }
+
 # Check the patch for a From:
                if (decode("MIME-Header", $line) =~ /^From:\s*(.*)/) {
-                       $author = $1;
-                       $author = encode("utf8", $author) if ($line =~ 
/=\?utf-8\?/i);
-                       $author =~ s/"//g;
-                       $author = reformat_email($author);
+                       $author = format_author_email($1, $line);
+                       if($author eq '') {
+                               $prevheader = $line;
+                       }
                }
 
 # Check the patch for a signoff:
-- 
2.27.0

Reply via email to