]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev_rules_parse_file: issue diagnostics about line continuation at EOF 26698/head
authorDmitry V. Levin <ldv@strace.io>
Wed, 8 Mar 2023 08:00:00 +0000 (08:00 +0000)
committerDmitry V. Levin <ldv@strace.io>
Wed, 8 Mar 2023 18:55:40 +0000 (18:55 +0000)
When udev rules file ends with a line continuation, the parser
used to silently ignore the line without any diagnostics at all.
It's time to break the vow of silence and let the parser issue some
error diagnostics.

src/udev/udev-rules.c
test/units/testsuite-17.11.sh

index 21223e01186da5985b8e137c30f65e7860f463bf..9d831a60047a29db9b1732a82890e0f2702239bf 100644 (file)
@@ -1279,6 +1279,7 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename) {
                 line_nr++;
                 line = skip_leading_chars(buf, NULL);
 
+                /* Lines beginning with '#' are ignored regardless of line continuation. */
                 if (line[0] == '#')
                         continue;
 
@@ -1320,6 +1321,10 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename) {
                 ignore_line = false;
         }
 
+        if (continuation)
+                log_line_error(rule_file, line_nr,
+                               "Unexpected EOF after line continuation, line ignored");
+
         rule_resolve_goto(rule_file);
         return 0;
 }
index d68aa69d41d5ab92299ceeaaf4858790eacd8841..ed5da16c07307c737722d03cd653dd8d3700d5ac 100755 (executable)
@@ -40,10 +40,18 @@ printf 'RUN+="/bin/true"%8175s\\\n' ' ' ' ' >sample.rules
 echo >>sample.rules
 udevadm verify sample.rules
 
-printf 'RUN+="/bin/true"%8176s\\\n' ' ' ' ' >sample.rules
+printf 'RUN+="/bin/true"%8176s\\\n #\n' ' ' ' ' >sample.rules
 echo >>sample.rules
 cat >exp <<'EOF'
-sample.rules:3 Line is too long, ignored
+sample.rules:5 Line is too long, ignored
+sample.rules: udev rules check failed
+EOF
+(! udevadm verify sample.rules 2>err)
+diff exp err
+
+printf '\\\n' >sample.rules
+cat >exp <<'EOF'
+sample.rules:1 Unexpected EOF after line continuation, line ignored
 sample.rules: udev rules check failed
 EOF
 (! udevadm verify sample.rules 2>err)