[PATCH] checkpatch: fix incorrect camelcase detection on numeric constant

From: Antonio Borneo
Date: Thu May 27 2021 - 17:47:52 EST


The code fragment below
int foo(int *array, int index)
{
return array[index & 0xFF];
}
triggers an incorrect camelcase detection by checking a subset of
the hex constant:
CHECK: Avoid CamelCase: <xFF>
#3: FILE: test.c:3:
+ return array[index & 0xFF];

This is caused by passing the whole string "array[index & 0xFF]"
to the inner loop that iterates over a "$Ident" match.
With no check to exclude a constant, the match iterates over
"array", "index" and "xFF", thus the camelcase detection.

Similar issue can be detected with other constants like "1uL",
"0xffffU".

Force the match to start at word boundary so the constants will be
filtered-out.

Signed-off-by: Antonio Borneo <borneo.antonio@xxxxxxxxx>
---
scripts/checkpatch.pl | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

To: Andy Whitcroft <apw@xxxxxxxxxxxxx>
To: Joe Perches <joe@xxxxxxxxxxx>
To: Dwaipayan Ray <dwaipayanray1@xxxxxxxxx>
To: Lukas Bulwahn <lukas.bulwahn@xxxxxxxxx>
Cc: linux-kernel@xxxxxxxxxxxxxxx

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 23697a6b1eaa..f0032166dfc1 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -5656,7 +5656,7 @@ sub process {
$var !~ /^(?:[a-z0-9_]*|[A-Z0-9_]*)?_?[a-z][A-Z](?:_[a-z0-9_]+|_[A-Z0-9_]+)?$/ &&
#Ignore some three character SI units explicitly, like MiB and KHz
$var !~ /^(?:[a-z_]*?)_?(?:[KMGT]iB|[KMGT]?Hz)(?:_[a-z_]+)?$/) {
- while ($var =~ m{($Ident)}g) {
+ while ($var =~ m{\b($Ident)}g) {
my $word = $1;
next if ($word !~ /[A-Z][a-z]|[a-z][A-Z]/);
if ($check) {

base-commit: c4681547bcce777daf576925a966ffa824edd09d
--
2.31.1