checksrc: catch banned functions when preceded by (

Also add a test case.

Closes #18779
This commit is contained in:
Viktor Szakats 2025-09-30 12:47:01 +02:00
parent c478c7efdf
commit 684f4cdd3e
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
2 changed files with 10 additions and 3 deletions

View file

@ -893,7 +893,8 @@ sub scanfile {
# scan for use of banned functions
my $bl = $l;
again:
if(($l =~ /^(.*?\W)(\w+)(\s*\()/x) && $banfunc{$2}) {
if((($l =~ /^(.*?\W)(\w+)(\s*\()/x) && $banfunc{$2}) ||
(($l =~ /^(.*?\()(\w+)(\s*\()/x) && $banfunc{$2})) {
my $bad = $2;
my $prefix = $1;
my $suff = $3;
@ -904,6 +905,7 @@ sub scanfile {
$prefix =~ s/\*/\\*/;
$prefix =~ s/\[/\\[/;
$prefix =~ s/\]/\\]/;
$prefix =~ s/\(/\\(/;
$suff =~ s/\(/\\(/;
$l =~ s/$prefix$bad$suff/$prefix$replace/;
goto again;

View file

@ -74,6 +74,8 @@ void startfunc(int a, int b) {
if(a) b++;
if(sprintf(buffer, "%s", moo)) {}
// CPP comment ?
/* comment doesn't end
@ -192,7 +194,10 @@ void startfunc(int a, int b) {
./%LOGDIR/code1185.c:57:7: warning: conditional block on the same line (ONELINECONDITION)
if(a) b++;
^
./%LOGDIR/code1185.c:59:2: warning: // comment (CPPCOMMENTS)
./%LOGDIR/code1185.c:59:5: warning: use of sprintf is banned (BANNEDFUNC)
if(sprintf(buffer, "%s", moo)) {}
^
./%LOGDIR/code1185.c:61:2: warning: // comment (CPPCOMMENTS)
// CPP comment ?
^
./%LOGDIR/code1185.c:1:1: error: Missing copyright statement (COPYRIGHT)
@ -201,7 +206,7 @@ void startfunc(int a, int b) {
./%LOGDIR/code1185.c:1:1: error: Missing closing comment (OPENCOMMENT)
^
checksrc: 0 errors and 39 warnings
checksrc: 0 errors and 40 warnings
</stdout>
<errorcode>
5