diff options
-rwxr-xr-x | test/udev-test.pl | 12 | ||||
-rw-r--r-- | udev_rules_parse.c | 14 |
2 files changed, 19 insertions, 7 deletions
diff --git a/test/udev-test.pl b/test/udev-test.pl index 9a88d06271..63715ac093 100755 --- a/test/udev-test.pl +++ b/test/udev-test.pl @@ -1500,6 +1500,18 @@ KERNEL="sda1", NAME=="no" KERNEL=="sda1", NAME="yes" EOF }, + { + desc => "overlong comment line", + subsys => "block", + devpath => "/block/sda/sda1", + exp_name => "yes", + rules => <<EOF +# 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 + # 012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789 +KERNEL="sda1", NAME=="no" +KERNEL=="sda1", NAME="yes" +EOF + }, ); # set env diff --git a/udev_rules_parse.c b/udev_rules_parse.c index 271de6f879..8d69e74864 100644 --- a/udev_rules_parse.c +++ b/udev_rules_parse.c @@ -543,7 +543,7 @@ static int add_to_rules(struct udev_rules *rules, char *line, const char *filena continue; } - err("unknown key '%s'", key); + err("unknown key '%s' in %s:%u", key, filename, lineno); } /* skip line if not any valid key was found */ @@ -603,11 +603,6 @@ static int parse_file(struct udev_rules *rules, const char *filename) cur += count+1; lineno++; - if (count >= sizeof(line)) { - err("line too long, rule skipped '%s:%u'", filename, lineno); - continue; - } - /* eat the whitespace */ while ((count > 0) && isspace(bufline[0])) { bufline++; @@ -620,7 +615,12 @@ static int parse_file(struct udev_rules *rules, const char *filename) if (bufline[0] == COMMENT_CHARACTER) continue; - /* skip backslash and newline from multi line rules */ + if (count >= sizeof(line)) { + err("line too long, rule skipped '%s:%u'", filename, lineno); + continue; + } + + /* skip backslash and newline from multiline rules */ for (i = j = 0; i < count; i++) { if (bufline[i] == '\\' && bufline[i+1] == '\n') continue; |