By quoting the search expression to be replaced. This avoid the issue
when the code leading up to a banned function contained regex characters
that the script did not explicitly handle, e.g. `+`.
Assisted-by: Daniel Stenberg
Ref: https://perldoc.perl.org/functions/quotemeta
Follow-up to
dd37d6970cfd8b4cf47ebd469f03772813b92c23 #18775
Closes #18845
checkwarn("BANNEDFUNC",
$line, length($prefix), $file, $ol,
"use of $bad is banned");
- my $replace = 'x' x (length($bad) + 1);
- $prefix =~ s/\*/\\*/;
- $prefix =~ s/\[/\\[/;
- $prefix =~ s/\]/\\]/;
- $prefix =~ s/\(/\\(/;
- $prefix =~ s/\)/\\)/;
- $suff =~ s/\(/\\(/;
- $l =~ s/$prefix$bad$suff/$prefix$replace/;
+ my $search = quotemeta($prefix . $bad . $suff);
+ my $replace = $prefix . 'x' x (length($bad) + 1);
+ $l =~ s/$search/$replace/;
goto again;
}
$l = $bl; # restore to pre-bannedfunc content