[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 8/8] checkpatch: handle token pasting better
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 8/8] checkpatch: handle token pasting better |
Date: |
Fri, 6 Jul 2018 19:14:28 +0200 |
The mechanism to find possible type tokens can sometimes be confused and go
into an
infinite loop. This happens for example in QEMU for a line that looks like
uint## BITS ##_t S = _S, T = _T; \
uint## BITS ##_t as, at, xs, xt, xd; \
Because the token pasting operator does not have a space before _t, it does not
match $notPermitted. However, (?x) is turned on in the regular expression for
modifiers, and thus ##_t matches the empty string. As a result, annotate_values
goes in an infinite loop.
The solution is simply to remove token pasting operators from the string before
looking for modifiers. In the example above, the string uintBITS_t will be
evaluated as a candidate modifier. This is not optimal, but it works as long
as people do not write things like a##s##m, and it fits nicely into sub
possible.
For a similar reason, \# should be rejected always, even if it is not
at end of line or followed by whitespace.
The same patch was sent to the Linux kernel mailing list.
Reported-by: Aleksandar Markovic <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
scripts/checkpatch.pl | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index 223681b..42e1c50 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1132,11 +1132,10 @@ sub possible {
case|
else|
asm|__asm__|
- do|
- \#|
- \#\#
+ do
)(?:\s|$)|
- ^(?:typedef|struct|enum)\b
+ ^(?:typedef|struct|enum)\b|
+ ^\#
)}x;
warn "CHECK<$possible> ($line)\n" if ($dbg_possible > 2);
if ($possible !~ $notPermitted) {
@@ -1146,7 +1145,7 @@ sub possible {
if ($possible =~ /^\s*$/) {
} elsif ($possible =~ /\s/) {
- $possible =~ s/\s*$Type\s*//g;
+ $possible =~ s/\s*(?:$Type|\#\#)\s*//g;
for my $modifier (split(' ', $possible)) {
if ($modifier !~ $notPermitted) {
warn "MODIFIER: $modifier ($possible)
($line)\n" if ($dbg_possible);
--
1.8.3.1
- [Qemu-devel] [PULL 0/8] Bug fixes for 2018-07-06, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 4/8] i386: fix '-cpu ?' output for host cpu type, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 1/8] pr-helper: avoid error on PR IN command with zero request size, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 3/8] qtest: Use cpu address space instead of system memory, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 2/8] pr-helper: Rework socket path handling, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 5/8] qemu-char: check errno together with ret < 0, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 6/8] pr-manager-helper: fix memory leak on event, Paolo Bonzini, 2018/07/06
- [Qemu-devel] [PULL 8/8] checkpatch: handle token pasting better,
Paolo Bonzini <=
- [Qemu-devel] [PULL 7/8] ioapic: remove useless lower bounds check, Paolo Bonzini, 2018/07/06
- Re: [Qemu-devel] [PULL 0/8] Bug fixes for 2018-07-06, Peter Maydell, 2018/07/06