[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[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: