checkpatch: check return of `git_commit_info`
authorTamir Duberstein <tamird@gmail.com>
Wed, 4 Dec 2024 18:41:06 +0000 (13:41 -0500)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 13 Jan 2025 04:21:00 +0000 (20:21 -0800)
Avoid string concatenation with an undefined variable when a reference to
a missing commit is contained in a `Fixes` tag.

Given this patch:

: From: Tamir Duberstein <tamird@gmail.com>
: Subject: Test patch
: Date: Fri, 25 Oct 2024 19:30:51 -0400
:
: This is a test patch.
:
: Fixes: deadbeef111
: Signed-off-by: Tamir Duberstein <tamird@gmail.com>
: --- /dev/null
: +++ b/new-file
: @@ -0,0 +1 @@
: +Test.

Before:

WARNING: Please use correct Fixes: style 'Fixes: <12 chars of sha1> ("<title line>")' - ie: 'Fixes:  ("commit title")'
WARNING: Unknown commit id 'deadbeef111', maybe rebased or not pulled?
Use of uninitialized value $cid in concatenation (.) or string at scripts/checkpatch.pl line 3242.

After:

WARNING: Unknown commit id 'deadbeef111', maybe rebased or not pulled?

This patch also reduce duplication slightly.

[akpm@linux-foundation.org: s/12 chars of sha1/12+ chars of sha1/, per Jon]
Link: https://lkml.kernel.org/r/87o70kt232.fsf@trenco.lwn.net
Link: https://lkml.kernel.org/r/20241204-checkpatch-missing-commit-v1-1-68b34c94944e@gmail.com
Signed-off-by: Tamir Duberstein <tamird@gmail.com>
Cc: Andy Whitcroft <apw@canonical.com>
Cc: Dwaipayan Ray <dwaipayanray1@gmail.com>
Cc: Joe Perches <joe@perches.com>
Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
scripts/checkpatch.pl

index dbb9c3c6fe30f9065a5a0b3d437835b336fc5206..2bdc3d169af56f92cc345299efe047081350af64 100755 (executable)
@@ -3237,12 +3237,12 @@ sub process {
                        my ($cid, $ctitle) = git_commit_info($orig_commit, $id,
                                                             $title);
 
-                       if ($ctitle ne $title || $tag_case || $tag_space ||
-                           $id_length || $id_case || !$title_has_quotes) {
+                       if (defined($cid) && ($ctitle ne $title || $tag_case || $tag_space || $id_length || $id_case || !$title_has_quotes)) {
+                               my $fixed = "Fixes: $cid (\"$ctitle\")";
                                if (WARN("BAD_FIXES_TAG",
-                                    "Please use correct Fixes: style 'Fixes: <12 chars of sha1> (\"<title line>\")' - ie: 'Fixes: $cid (\"$ctitle\")'\n" . $herecurr) &&
+                                    "Please use correct Fixes: style 'Fixes: <12+ chars of sha1> (\"<title line>\")' - ie: '$fixed'\n" . $herecurr) &&
                                    $fix) {
-                                       $fixed[$fixlinenr] = "Fixes: $cid (\"$ctitle\")";
+                                       $fixed[$fixlinenr] = $fixed;
                                }
                        }
                }