[lintian] 01/01: checks/udev.pm: Add simple GOTO parsing to avoid false positives when checking for udev rules for SUBSYSTEM specifiers. (Closes: #869547, #889639)
This is an automated email from the git hooks/post-receive script.
lamby pushed a commit to branch master
in repository lintian.
commit a25f87117ebe4deb3ec6ccee3d5d5c81e7aeba1d
Author: Chris Lamb <lamby@debian.org>
Date: Mon Feb 5 15:57:46 2018 +0000
checks/udev.pm: Add simple GOTO parsing to avoid false positives when checking for udev rules for SUBSYSTEM specifiers. (Closes: #869547, #889639)
---
checks/udev.pm | 8 ++++++--
debian/changelog | 3 +++
t/tests/udev-rules/debian/debian/udev-rules.udev | 7 +++++++
t/tests/udev-rules/tags | 1 +
4 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/checks/udev.pm b/checks/udev.pm
index 4e76591..07962d4 100644
--- a/checks/udev.pm
+++ b/checks/udev.pm
@@ -43,7 +43,7 @@ sub run {
}
sub check_rule {
- my ($file, $linenum, $rule) = @_;
+ my ($file, $linenum, $in_goto, $rule) = @_;
# for USB, if everyone or the plugdev group members are
# allowed access, the uaccess tag should be used too.
@@ -78,6 +78,7 @@ sub check_rule {
# subsystem, as vendor/product is subsystem specific.
if ( $rule =~ m/ATTR\{idVendor\}=="[0-9a-fA-F]+"/
&& $rule =~ m/ATTR\{idProduct\}=="[0-9a-fA-F]*"/
+ && $in_goto !~ m/SUBSYSTEM!="[^"]+"/
&& $rule !~ m/SUBSYSTEM=="[^"]+"/) {
tag(
'udev-rule-missing-subsystem',
@@ -95,6 +96,7 @@ sub check_udev_rules {
my $linenum = 0;
my $cont;
my $retval = 0;
+ my $in_goto = '';
while (<$fd>) {
chomp;
$linenum++;
@@ -107,7 +109,9 @@ sub check_udev_rules {
next;
}
next if /^#.*/; # Skip comments
- $retval |= $check->($file, $linenum, $_);
+ $in_goto = '' if m/LABEL="[^"]+"/;
+ $in_goto = $_ if m/GOTO="[^"]+"/;
+ $retval |= $check->($file, $linenum, $in_goto, $_);
}
close($fd);
return $retval;
diff --git a/debian/changelog b/debian/changelog
index 452ba97..ffd05d2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -34,6 +34,9 @@ lintian (2.5.74) UNRELEASED; urgency=medium
maintainer-script-should-not-use-recursive-chown-or-chmod tag.
Heavily based on a patch by Daniel Kahn Gillmor - thanks!
(Closes: #889489)
+ * checks/udev.pm:
+ + [CL] Add simple GOTO parsing to avoid false positives when checking
+ for udev rules for SUBSYSTEM specifiers. (Closes: #869547, #889639)
* commands/reporting-{html-reports,lintian-harness}.pm:
+ [NT] Register packages that fail during archive wide processing.
diff --git a/t/tests/udev-rules/debian/debian/udev-rules.udev b/t/tests/udev-rules/debian/debian/udev-rules.udev
index dd3442b..538e174 100644
--- a/t/tests/udev-rules/debian/debian/udev-rules.udev
+++ b/t/tests/udev-rules/debian/debian/udev-rules.udev
@@ -15,3 +15,10 @@ ACTION=="add", ATTR{idVendor}=="0000", ATTR{idProduct}=="0005", \
SUBSYSTEM=="usb", ACTION=="add", ATTR{idVendor}=="0000", ATTR{idProduct}=="000a", \
ID_TEST_DEVICE="1"
+
+SUBSYSTEM!="usb", GOTO="target"
+ATTR{idVendor}=="0000", ATTR{idProduct}=="0000", RUN+="missing-subsystem-false-positive"
+LABEL="target"
+
+# Ensure we trigger this one after a GOTO
+ATTR{idVendor}=="0000", ATTR{idProduct}=="0000", RUN+="missing-subsystem"
diff --git a/t/tests/udev-rules/tags b/t/tests/udev-rules/tags
index 5798a00..becee41 100644
--- a/t/tests/udev-rules/tags
+++ b/t/tests/udev-rules/tags
@@ -1,4 +1,5 @@
E: udev-rules: udev-rule-unreadable lib/udev/rules.d/60-dangling-symlink.rules
W: udev-rules: udev-rule-missing-subsystem lib/udev/rules.d/60-udev-rules.rules:14 vendor/product matching missing SUBSYSTEM specifier
+W: udev-rules: udev-rule-missing-subsystem lib/udev/rules.d/60-udev-rules.rules:24 vendor/product matching missing SUBSYSTEM specifier
W: udev-rules: udev-rule-missing-uaccess lib/udev/rules.d/60-udev-rules.rules:2 user accessible device missing TAG+="uaccess"
W: udev-rules: udev-rule-missing-uaccess lib/udev/rules.d/60-udev-rules.rules:5 user accessible device missing TAG+="uaccess"
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/lintian/lintian.git
Reply to: