mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
[PATCH] fix udev segfaults with bad permissions file
On Tue, Sep 14, 2004 at 02:53:12PM +0200, Loleslaw wrote: > Hi, > Since I started using udev-031 on my gentoo udevstart would just segfault > (udev-030 worked). As it turned out I had a file in /etc/udev/permissions.d > with a single space in one line. I've cleaned the file and it works all > right, but I thought you could be interested. > I've traced it to function namedev_init_permissions in namedev_parse.c > I don't know C well enough to suggest a patch. Yeah, thanks for pointing that out. It only happens if the file ends with whitespace-only lines. Here is a fix and a test for udev-test.pl to cover that case.
This commit is contained in:
parent
cb5203fb48
commit
3db7fa2702
@ -182,15 +182,13 @@ static int namedev_parse_rules(char *filename)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* empty line? */
|
|
||||||
if (bufline[0] == '\0' || bufline[0] == '\n')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* eat the whitespace */
|
/* eat the whitespace */
|
||||||
while (isspace(bufline[0])) {
|
while ((count > 0) && isspace(bufline[0])) {
|
||||||
bufline++;
|
bufline++;
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
|
if (count == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* see if this is a comment */
|
/* see if this is a comment */
|
||||||
if (bufline[0] == COMMENT_CHARACTER)
|
if (bufline[0] == COMMENT_CHARACTER)
|
||||||
@ -381,15 +379,13 @@ static int namedev_parse_permissions(char *filename)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* empty line? */
|
|
||||||
if (bufline[0] == '\0' || bufline[0] == '\n')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* eat the whitespace */
|
/* eat the whitespace */
|
||||||
while (isspace(bufline[0])) {
|
while ((count > 0) && isspace(bufline[0])) {
|
||||||
bufline++;
|
bufline++;
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
|
if (count == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* see if this is a comment */
|
/* see if this is a comment */
|
||||||
if (bufline[0] == COMMENT_CHARACTER)
|
if (bufline[0] == COMMENT_CHARACTER)
|
||||||
|
@ -158,6 +158,22 @@ EOF
|
|||||||
# this is a comment with whitespace before the comment
|
# this is a comment with whitespace before the comment
|
||||||
KERNEL="ttyUSB0", NAME="visor"
|
KERNEL="ttyUSB0", NAME="visor"
|
||||||
|
|
||||||
|
EOF
|
||||||
|
},
|
||||||
|
{
|
||||||
|
desc => "Handle whitespace only lines (and replace kernel name)",
|
||||||
|
subsys => "tty",
|
||||||
|
devpath => "/class/tty/ttyUSB0",
|
||||||
|
exp_name => "whitespace" ,
|
||||||
|
conf => <<EOF
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# this is a comment with whitespace before the comment
|
||||||
|
KERNEL="ttyUSB0", NAME="whitespace"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EOF
|
EOF
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -161,15 +161,13 @@ static int parse_config_file(void)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* empty line? */
|
|
||||||
if (bufline[0] == '\0' || bufline[0] == '\n')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* eat the whitespace */
|
/* eat the whitespace */
|
||||||
while (isspace(bufline[0])) {
|
while ((count > 0) && isspace(bufline[0])) {
|
||||||
bufline++;
|
bufline++;
|
||||||
count--;
|
count--;
|
||||||
}
|
}
|
||||||
|
if (count == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
/* see if this is a comment */
|
/* see if this is a comment */
|
||||||
if (bufline[0] == COMMENT_CHARACTER)
|
if (bufline[0] == COMMENT_CHARACTER)
|
||||||
|
Loading…
Reference in New Issue
Block a user